Heim >Backend-Entwicklung >C++ >Warum kann ich ein Klassenfeld nicht mit einem anderen nichtstatischen Feld initialisieren?

Warum kann ich ein Klassenfeld nicht mit einem anderen nichtstatischen Feld initialisieren?

Linda Hamilton
Linda HamiltonOriginal
2025-01-01 10:48:10382Durchsuche

Why Can't I Initialize a Class Field Using Another Non-Static Field?

Feldinitialisierer in Klasseninstanzen verstehen

Beim Entwerfen von Klassen ist es wichtig, Felder mit geeigneten Werten zu initialisieren, insbesondere nicht statische Felder. Diese Fehlermeldung „Ein Feldinitialisierer kann nicht auf das nicht-statische Feld, die nicht-statische Methode oder die nicht-statische Eigenschaft verweisen“ erscheint, wenn Sie versuchen, eine Instanzvariable innerhalb einer Klasse zu initialisieren, indem Sie direkt auf nicht-statische Klassenmitglieder zugreifen.

In In Ihrem speziellen Fall enthält die Service-Klasse ein Feld, das mit einer Instanz der DinnerRepository-Klasse und einer anschließenden Zuweisung eines abgerufenen Dinner-Objekts initialisiert wird. Dieser Ansatz führt jedoch zu dem oben genannten Fehler.

Alternative Lösungen zur Feldinitialisierung

Eine Alternative zur Feldinitialisierung ist die Verwendung von Instanzkonstruktoren zum Einrichten von Instanzwerten. Indem Sie einen Konstruktor in der Service-Klasse deklarieren und die Felder DinnerRepository und Dinner darin initialisieren, können Sie die Felder nur initialisieren, wenn die Service-Instanz erstellt wird:

public class Service
{
    private readonly DinnerRepository repo;
    private readonly Dinner dinner;

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}

In diesem Szenario werden die Felder während des Objekts initialisiert Instanziierung, um sicherzustellen, dass die Dienstinstanz vollständig eingerichtet ist, bevor sie in der Anwendung verwendet wird.

Eine andere Möglichkeit besteht darin, die Felder innerhalb von Methoden und Eigenschaften träge zu initialisieren. Anstatt die Felder im Konstruktor zu initialisieren, können Sie Methoden oder Eigenschaften erstellen, die die Werte bei Bedarf abrufen. Dieser Ansatz bietet mehr Kontrolle darüber, wann und wie die Felder mit Daten gefüllt werden.

Durch Befolgen dieser Richtlinien können Sie nicht statische Felder innerhalb von Klasseninstanzen effektiv initialisieren und so den Fehler „Ein Feldinitialisierer kann nicht auf die nicht referenzieren“ vermeiden -statisches Feld, Methode oder Eigenschaft.“

Das obige ist der detaillierte Inhalt vonWarum kann ich ein Klassenfeld nicht mit einem anderen nichtstatischen Feld initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn