Heim > Backend-Entwicklung > C++ > Warum kann ich ein nichtstatisches Feld nicht mit einem Verweis auf ein anderes nichtstatisches Feld in C# initialisieren?

Warum kann ich ein nichtstatisches Feld nicht mit einem Verweis auf ein anderes nichtstatisches Feld in C# initialisieren?

Susan Sarandon
Freigeben: 2024-12-31 13:08:10
Original
341 Leute haben es durchsucht

Why Can't I Initialize a Non-Static Field with a Reference to Another Non-Static Field in C#?

Mehrdeutigkeit des Feldinitialisierers: Nichtstatische Feldreferenz in der Serviceklasse

In der Softwareentwicklung müssen wir häufig Instanzfelder in einer Klasse initialisieren um ihre Funktionalität zu nutzen. Der Versuch, ein Instanzfeld mit einem Verweis auf ein nicht-statisches Feld, eine nicht-statische Methode oder eine nicht-statische Eigenschaft in einer anderen Klasse zu initialisieren, führt jedoch zu der Fehlermeldung „Ein Feldinitialisierer kann nicht auf das nicht-statische Feld, die nicht-statische Methode oder die nicht-statische Eigenschaft verweisen.“

Betrachten Sie das folgende Beispiel, in dem wir eine DinnerRepository-Klasse und eine Service-Klasse haben:

public class DinnerRepository
{
    DinnerDataContext db = new DinnerDataContext();
    public Dinner GetDinner(int id) {...}
}

public class Service
{
    DinnerRepository repo = new DinnerRepository(); 
    Dinner dinner = repo.GetDinner(5);
}
Nach dem Login kopieren

Der Versuch, diesen Code zu kompilieren, löst den oben genannten Fehler aus. Dies liegt daran, dass der Feldinitialisierer für Dinner in der Service-Klasse auf die Repo-Instanz verweist, die nicht statisch ist. Feldinitialisierer haben einen begrenzten Umfang und können nicht auf instanzspezifische Mitglieder zugreifen.

Eine gängige Lösung zur Lösung dieses Problems besteht darin, die Initialisierung zu verschieben, bis der Konstruktor ausgeführt wurde. Bei diesem Ansatz werden jedoch eher lokale Variablen als Instanzvariablen erstellt.

Eine bevorzugte Lösung besteht darin, die Felder in einem Konstruktor zu initialisieren, in dem implizit auf diese Instanz verwiesen werden darf. Dieser Ansatz erstellt Instanzvariablen mit dem gewünschten Verhalten:

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

    public Service()
    {
        repo = new DinnerRepository();
        dinner = repo.GetDinner(5);
    }
}
Nach dem Login kopieren

Durch das Verständnis der Einschränkungen von Feldinitialisierern können Entwickler diesen häufigen Fehler vermeiden und Instanzvariablen in ihrem Code effektiv verwalten.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage