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.
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen