Zugriff auf nicht statisches Feld nicht möglich

7

Ich kann nicht herausfinden, warum es nach etwas Statischem sucht:

%Vor%

Ich bekomme Zugriff auf das nicht statische Feld 'connectionString' im statischen Kontext. Ich sehe nichts statisches in der Basis-Datenbank-Klasse, also warum?

Hier ist ein weiteres Beispiel, als wir das Gleiche gemacht haben:

%Vor%

ok, warum musste es eine statische Zeichenfolge sein, damit die Verbindungszeichenfolge übergeben wird?

    
PositiveGuy 16.09.2009, 03:26
quelle

2 Antworten

26

Wir haben hart gearbeitet, um genaue Fehlermeldungen zu geben, also lesen Sie sie sorgfältig. Die Fehlermeldung sagt Ihnen genau, was schief läuft: Sie greifen auf ein nicht statisches Feld in einem Kontext zu, in dem es nur legal ist, auf Statik zuzugreifen.

Also, warum nennt ein basic constructor call Argument einen Kontext, in dem es nur legal ist, auf Statiken zuzugreifen?

Wenn Sie einen Basiskonstruktor aufrufen, dürfen die übergebenen Argumente nicht auf "this" verweisen. Warum? Da weder der abgeleitete Konstruktor noch der Basiskonstruktor für Ihr "Dies" bereits ausgeführt wurde, ist "dieses" höchstwahrscheinlich in einem inkonsistenten, teilweise initialisierten Zustand. Das ist ein Rezept für verrückte Bugs. Wir beschränken daher den Zugriff auf "dieses", bis wir wissen, dass zumindest der Basiskonstruktor ausgeführt wurde.

Diese Funktion unterstützt eine vernünftige, gut geordnete, verständliche, wartbare und fehlerfreie Konstruktionslogik; Ich empfehle, mit diesen Sicherheitsvorkehrungen zu arbeiten, nicht dagegen.

    
Eric Lippert 16.09.2009 15:10
quelle
4

Ihr Problem liegt im MyDB-Konstruktor. Das Instanzfeld (MyDB.connectionString) wird nicht initialisiert, bis der Aufruf des Basiskonstruktors zurückkehrt, also befindet sich alles innerhalb von base( ... ) im statischen Kontext. Arbeite einfach damit ...

%Vor%

oder besser noch (wie von Simon Fox vorgeschlagen) ...

%Vor%     
Av Pinzur 16.09.2009 03:33
quelle

Tags und Links