Instanzen vs. Statik: Entmystifizierung eines häufigen Initialisierungsfehlers
In der Softwareentwicklung enthalten Klassen häufig sowohl Instanz- als auch statische Elemente. Instanzmitglieder sind einzelnen Instanzen einer Klasse zugeordnet, während statische Mitglieder von allen Instanzen gemeinsam genutzt werden.
Bei der Arbeit mit Instanzmitgliedern ist es wichtig, die Einschränkungen von Feldinitialisierern zu verstehen. Feldinitialisierer werden verwendet, um Instanzfeldern beim Erstellen einer Instanz Werte zuzuweisen. Wie jedoch in der Fehlermeldung „Ein Feldinitialisierer kann nicht auf ein nicht statisches Feld, eine nicht statische Methode oder eine nicht statische Eigenschaft verweisen“ angegeben ist, können Feldinitialisierer nicht auf nicht statische Elemente verweisen.
Originalcode-Analyse
Der von Ihnen bereitgestellte Code zeigt diese Einschränkung. Die Service-Klasse enthält ein Instanzfeld-Repository und einen Feldinitialisierer, der versucht, eine nicht statische Methode GetDinner für das Instanz-Repository aufzurufen. Dies löst einen Fehler aus, da der Feldinitialisierer versucht, auf ein nicht statisches Mitglied zuzugreifen, bevor die Instanz vollständig initialisiert wurde.
Lösungen
Es gibt zwei gängige Lösungen für dieses Problem:
Best Practice
Beide Lösungen sind gültig, aber die Konstruktorinitialisierung wird im Allgemeinen als die bevorzugte angesehen Ansatz. Dies liegt daran, dass es mehr Flexibilität bietet und es Ihnen ermöglicht, andere Instanzfelder nach Bedarf zu initialisieren.
Indem Sie die Verwendung von Feldinitialisierern für nicht statische Mitglieder vermeiden, können Sie Initialisierungsfehler verhindern und sicherstellen, dass sich Ihr Code wie beabsichtigt verhält .
Das obige ist der detaillierte Inhalt vonWarum kann mein Feldinitialisierer nicht auf nichtstatische Elemente zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!