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?

Dec 31, 2024 pm 01:08 PM

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);
}

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);
    }
}

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!

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

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Stock Market GPT

Stock Market GPT

KI-gestützte Anlageforschung für intelligentere Entscheidungen

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

C -Vektor der Saiten Beispiel C -Vektor der Saiten Beispiel Aug 21, 2025 am 04:02 AM

Die grundlegende Nutzung von std :: vector umfasst: 1. Declare Vector; 2. Fügen Sie Elemente mit push_back () hinzu; 3.. Initialisieren Sie mit der Initialisierungsliste; 4. Schleifenquelle mit Reichweite für; 5. Zugriffselemente über Index oder zurück (); 6. Direkte Zuordnung von Werten zur Änderung von Elementen; 7. Löschen Sie die Endelemente mit pop_back (); 8. Anrufgröße (), um die Anzahl der Elemente zu erhalten; Es wird empfohlen, Constauto zu verwenden und zu vermeiden, dass das Kopieren vorhanden ist, Reserve () vor dem Allocal () zur Verbesserung der Leistung und zur Beachtung der Überprüfung achten, ob es vor dem Zugriff nicht leer ist. Diese Datenstruktur ist eine effiziente und bevorzugte Methode, um String -Listen zu verarbeiten.

So schreiben Sie einen einfachen TCP -Client/Server in c So schreiben Sie einen einfachen TCP -Client/Server in c Aug 17, 2025 am 01:50 AM

Die Antwort ist, dass das Schreiben eines einfachen TCP -Clients und Servers die vom Betriebssystem bereitgestellte Socket -Programmierschnittstelle erfordert. Der Server vervollständigt die Kommunikation, indem er Steckdosen erstellt, Adressen verbindet, Ports anhört, Verbindungen akzeptiert und Daten sendet und empfängt. Der Client erkennt die Interaktion, indem es Sockets erstellt, eine Verbindung zu Servern herstellt, Anfragen sendet und Antworten empfängt. Der Beispielcode zeigt die grundlegende Implementierung der Verwendung der Berkeley Socket API unter Linux oder MacOS, einschließlich der erforderlichen Header -Dateien, Porteinstellungen, Fehlerbehandlung und Ressourcenfreigabe. Führen Sie nach der Kompilierung zuerst den Server aus und führen Sie den Client anschließend aus, um eine Zwei-Wege-Kommunikation zu erreichen. Die Windows -Plattform muss die Winsock -Bibliothek initialisieren. Dieses Beispiel ist ein blockierendes E/A -Modell, das zum Erlernen grundlegender Socket -Programmierung geeignet ist.

C -Operator -Überladungsbeispiel C -Operator -Überladungsbeispiel Aug 15, 2025 am 10:18 AM

Die Überlastung des Bedieners in C ermöglicht es, dass neue Verhaltensweisen von Standardbetreibern benutzerdefinierten Typen zugeordnet werden, 1. Neue Objekte über die Überlastung der Mitgliederfunktion zurückgeben. 2. Overload = Ändern Sie das aktuelle Objekt und Rückgabereferenz; 3.. Freundfunktion Überladung

C falsches Freigabebeispiel C falsches Freigabebeispiel Aug 16, 2025 am 10:42 AM

Falsharing tritt auf, wenn mehrere Threads unterschiedliche Variablen in derselben Cache -Zeile ändern, was zu einem Cache -Ausfall und Leistungsabbau führt. 1. Verwenden Sie die Strukturfüllung, um jede Variable ausschließlich eine Cache -Linie zu belegen. 2. Verwenden Sie Alignas oder Std :: Hardware_Destruction_interference_Size für Speicherausrichtung; 3. Verwenden Sie Thread-lokale Variablen, um die Ergebnisse endgültig zu verschmelzen, wodurch das Teilen von Pseudo vermieden und die Leistung von Multi-Thread-Programmen verbessert wird.

So verwenden Sie reguläre Ausdrücke in C. So verwenden Sie reguläre Ausdrücke in C. Aug 12, 2025 am 10:46 AM

Um reguläre Ausdrücke in C zu verwenden, müssen Sie Header -Dateien einbeziehen und die Funktionen für die Musteranpassung und die Textverarbeitung verwenden. 1. Verwenden Sie STD :: regex_match, um die vollständige Zeichenfolge zu entsprechen, und kehren Sie nur dann zurück, wenn die gesamte Zeichenfolge dem Muster entspricht. 2. Verwenden Sie std :: regex_search, um Übereinstimmungen an einer beliebigen Position in der Zeichenfolge zu finden. 3.. Verwenden Sie STD :: SMATCH, um die Erfassungsgruppe zu extrahieren, die vollständige Übereinstimmung durch Übereinstimmungen [0], Übereinstimmungen [1] und nachfolgende Unterübereinstimmungen zu erhalten. V. 5. Sie können beim Bau des Regex (

Wie man mit Coroutinen in C arbeitet Wie man mit Coroutinen in C arbeitet Aug 27, 2025 am 04:48 AM

C 20CoroutinesArefunctionsThatCansuspendandResumexexexexusingco_Await, Co_yield, orco_return, Aktivierung von Tausend -LazyValuation;

Wie arbeitet man mit STD :: Variante in C. Wie arbeitet man mit STD :: Variante in C. Aug 14, 2025 am 11:32 AM

STD :: Variante ist eine von C 17 eingeführte Typ-Safe-Gewerkschaft. Sie kann den Wert eines der angegebenen Typen sicher halten. Es kann sichere den sicheren Zugriff erkennen und überprüft werden, wie sie Methoden wie STD :: GET, STD :: Holds_Alternative, Std :: Visit und Std :: get_if. In Kombination mit STD :: Monostat können optionale Werte simuliert werden. Es wird empfohlen, STD :: Besuch für die Typverteilung zu verwenden und Listen mit großer Typ zu vermeiden, um die Wartbarkeit zu verbessern und letztendlich die Sicherheit und die Sicherheit der Type zu gewährleisten.

So verknüpfen Sie Bibliotheken in C. So verknüpfen Sie Bibliotheken in C. Aug 21, 2025 am 08:33 AM

Um Bibliotheken in C zu verknüpfen, müssen Sie -l verwenden, um den Bibliothekspfad beim Kompilieren zu angeben, um den Bibliotheksnamen anzugeben und -i zu verwenden, um den Header -Dateipfad einzugeben, um sicherzustellen, dass die statischen oder dynamischen Bibliotheksdateien vorhanden sind und korrekt benannt werden. Begen Sie gegebenenfalls den Pfad der Laufzeitbibliothek durch -WL, -Rate, damit der Compiler die Erklärung feststellen kann. Der Linker kann die Implementierung finden und das Programm kann erfolgreich erstellt und ausgeführt werden.

See all articles