Heim > Artikel > Backend-Entwicklung > Was ist falsch am Zugriff auf virtuelle Mitglieder in Konstruktoren in C#?
Wenn eine virtuelle Eigenschaft oder virtuelle Methode in einer Klasse definiert ist und im Konstruktor auf die virtuelle Eigenschaft oder Methode zugegriffen wird, gibt Visual Studio keine Warnung aus und kompiliert kein Problem. aber wenn das Resharper-Plug-in installiert ist, wird eine Warnung ausgegeben: „Auf virtuelles Mitglied im Konstruktor zugegriffen“. Hier ist ein Beispiel:
using System; namespace VirtualDemo { class Program { static void Main(string[] args) { var test = new SubClass(); Console.ReadKey(); } } class BaseClass { protected virtual string VirtualProperty { get; set; } public BaseClass() { var p = VirtualProperty; VirtualMethod(); } protected virtual void VirtualMethod() { } } class SubClass : BaseClass { private MockClass _mockClass; public SubClass() { _mockClass = new MockClass(); } protected override string VirtualProperty { get { return _mockClass.MockProperty; } set { _mockClass.MockProperty = value; } } protected override void VirtualMethod() { var p = _mockClass.MockProperty; } } class MockClass { public string MockProperty { get; set; } } }
Dieses Beispiel Das ist sehr einfach. Beim Erstellen von SubClass
ist ein Nullreferenzfehler aufgetreten, da der Basisklassenkonstruktor vor dem Unterklassenkonstruktor ausgeführt wird und eine Mitgliedsklasse im Unterklassenkonstruktor initialisiert wird, der Basisklassenkonstruktor jedoch nicht noch nicht erstellt wurde, daher tritt ein Nullreferenzfehler auf. Es gibt viele Möglichkeiten, diese Situation zu vermeiden, indem Sie Unterklassenfelder initialisieren. Der zweite Schritt besteht darin, eine virtuelle Initialisierungsmethode zu definieren Rufen Sie die Unterklasse an, um die erforderlichen Abhängigkeiten bei der Erben dieser Methode zu initialisieren.
Das obige ist der detaillierte Inhalt vonWas ist falsch am Zugriff auf virtuelle Mitglieder in Konstruktoren in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!