


Warum kann ich in C#-Feldinitialisierern nicht auf nichtstatische Mitglieder verweisen?
Ein Feldinitialisierer kann nicht auf ein nichtstatisches Mitglied verweisen: Eine detaillierte Erklärung
Beim Versuch, die Felder einer Klasse mithilfe von Feldinitialisierern zu initialisieren , ist es wichtig, bestimmte Einschränkungen einzuhalten. Wie aus der Frage hervorgeht, führt das Verweisen auf nicht statische Elemente innerhalb von Feldinitialisierern zu einem Fehler.
Der bereitgestellte Code veranschaulicht dieses Problem innerhalb der Service-Klasse:
public class Service { DinnerRepository repo = new DinnerRepository(); // Error: Cannot reference non-static member `repo` Dinner dinner = repo.GetDinner(5); }
Der Fehler tritt auf, weil Feld Initialisierer dürfen nicht auf nicht statische Mitglieder der Klasse verweisen. Dazu gehören Instanzvariablen, Methoden und Eigenschaften.
Alternative Lösungen:
Die in der Antwort vorgeschlagenen Alternativlösungen umfassen:
-
Konstruktorinitialisierung verwenden:
- Bei diesem Ansatz wird die Feldwerte werden im Konstruktor der Klasse initialisiert:
public class Service { private readonly DinnerRepository repo; private readonly Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
-
Verwendung lokaler Variablen:
- Diese Option beinhaltet die Deklaration lokaler Variablen im Feld Initialisierer:
public class Service { DinnerRepository repo; Dinner dinner; public Service() { repo = new DinnerRepository(); dinner = repo.GetDinner(5); } }
Es ist jedoch wichtig zu beachten, dass der letztere Ansatz nur lokale Variablen und keine Instanzvariablen erstellt.
Einschränkungen für Feldinitialisierer:
Gemäß der C# 4-Spezifikation (Abschnitt 10.5.5.2) können Feldinitialisierer nicht auf die erstellte Instanz verweisen. Daher ist die direkte Referenzierung von Instanzmitgliedern über einen einfachen Namen innerhalb von Feldinitialisierern verboten.
Zusammenfassung:
Um die Meldung „Ein Feldinitialisierer kann nicht auf das nicht-statische Feld verweisen“ zu vermeiden , Methode oder Eigenschaft“-Fehler auftritt, ist es wichtig, die Einschränkungen von Feldinitialisierern zu verstehen und geeignete alternative Ansätze wie die Konstruktorinitialisierung oder die Verwendung lokaler Variablen zu verwenden. Diese Alternativen ermöglichen die ordnungsgemäße Initialisierung der Instanzmitglieder der Klasse.
Das obige ist der detaillierte Inhalt vonWarum kann ich in C#-Feldinitialisierern nicht auf nichtstatische Mitglieder verweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

In diesem Artikel werden die C -Standard -Vorlagenbibliothek (STL) erläutert, die sich auf seine Kernkomponenten konzentriert: Container, Iteratoren, Algorithmen und Funktoren. Es wird beschrieben, wie diese interagieren, um die generische Programmierung, die Verbesserung der Codeeffizienz und die Lesbarkeit t zu ermöglichen

Dieser Artikel beschreibt die effiziente Verwendung von STL -Algorithmus in c. Es betont die Auswahl der Datenstruktur (Vektoren vs. Listen), Algorithmus -Komplexitätsanalyse (z. B. std :: sortieren vs. std :: partial_sort), Iteratoranwendungen und parallele Ausführung. Häufige Fallstricke wie

In dem Artikel wird der dynamische Versand in C, seine Leistungskosten und Optimierungsstrategien erörtert. Es unterstreicht Szenarien, in denen der dynamische Versand die Leistung beeinflusst, und vergleicht sie mit statischer Versand, wobei die Kompromisse zwischen Leistung und Betonung betont werden

In dem Artikel wird die Verwendung von Move Semantics in C erörtert, um die Leistung zu verbessern, indem unnötiges Kopieren vermieden wird. Es umfasst die Implementierung von Bewegungskonstruktoren und Zuordnungsbetreibern unter Verwendung von STD :: MOVE

C 20 -Bereiche verbessern die Datenmanipulation mit Ausdruckskraft, Komposition und Effizienz. Sie vereinfachen komplexe Transformationen und integrieren sich in vorhandene Codebasen, um eine bessere Leistung und Wartbarkeit zu erhalten.

In diesem Artikel wird die effektive Ausnahmebehandlung in C, Covering Try, Catch und Wurp Mechanics, beschrieben. Es betont Best Practices wie Raii, die Vermeidung unnötiger Fangblöcke und die Protokollierung von Ausnahmen für robusten Code. Der Artikel befasst sich auch mit Perf

Artikel erörtert den effektiven Einsatz von RValue -Referenzen in C für Bewegungssemantik, perfekte Weiterleitung und Ressourcenmanagement, wobei Best Practices und Leistungsverbesserungen hervorgehoben werden. (159 Charaktere)

C Speicherverwaltung verwendet neue, löschende und intelligente Zeiger. In dem Artikel werden manuelle und automatisierte Verwaltung erörtert und wie intelligente Zeiger Speicherlecks verhindern.
