Appel de méthode virtuelle dans un constructeur : pourquoi c'est dangereux et comment l'éviter ?
Bonjour à tous ! Je suis un développeur C# débutant et j'ai rencontré un problème. J'utilise ReSharper et j'ai remarqué qu'il émet un avertissement : « Virtual member call in a constructor ». J'ai une classe de base `Animal` et une classe dérivée `Dog`. Dans le constructeur de `Animal`, j'appelle la méthode virtuelle `Speak()` pour définir un nom par défaut. Voici un exemple :
```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!");
}
}
```
Quand je crée `Dog dog = new Dog();`, je m'attends à ce que le nom soit "Buddy", mais parfois j'obtiens un comportement inattendu. Pourquoi cela se produit-il ? Puisque le constructeur de la classe de base est appelé avant le constructeur de la classe dérivée...
No answers yet.
Connectez-vous pour laisser une réponse