Appel de méthode virtuelle dans un constructeur : quel est le danger et comment l'éviter ?
Bonjour à tous ! Je suis un développeur C# débutant, et récemment ReSharper a commencé à m'afficher l'avertissement "Virtual member call in a constructor" pour ce code :
```csharp
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Initialize(name);
}
public virtual void Initialize(string name)
{
Name = name;
Console.WriteLine("Animal initialized");
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
// Vide
}
public override void Initialize(string name)
{
base.Initialize(name);
Breed = "Unknown";
Console.WriteLine("Dog initialized");
}
}
```
Le code semble fonctionner et affiche les messages attendus, mais ReSharper souligne l'appel à `Initialize(name)` dans le constructeur de `Animal`. Je ne comprends pas quel est le problème. Après tout, les méthodes virtuelles sont faites pour être redéfinies...