Avatar ·

Aufruf einer virtuellen Methode im Konstruktor: Warum ist das gefährlich und wie vermeidet man es?

Hallo zusammen! Ich bin ein C#-Anfänger und habe ein Problem. Ich benutze ReSharper und habe bemerkt, dass er eine Warnung ausgibt: „Virtual member call in a constructor“. Ich habe eine Basisklasse `Animal` und eine abgeleitete Klasse `Dog`. Im Konstruktor von `Animal` rufe ich die virtuelle Methode `Speak()` auf, um einen Standardnamen zu setzen. Hier ist ein Beispiel: ```csharp public class Animal { public string Name { get; set; } public Animal() { // ReSharper: Virtual member call in a constructor InitializeName(); } public virtual void InitializeName() { Name = "Unknown animal"; } } public class Dog : Animal { public override void InitializeName() { Name = "Buddy"; Console.WriteLine("Dog initialized!"); } } ``` Wenn ich `Dog dog = new Dog();` erstelle, erwarte ich, dass der Name "Buddy" ist, aber manchmal erhalte ich unerwartetes Verhalten. Warum passiert das? Schließlich wird der Konstruktor der Basisklasse vor dem Konstruktor der abgeleiteten Klasse aufgerufen.