Avatar ·

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...