Avatar ·

Llamada a método virtual en un constructor: por qué es peligroso y cómo evitarlo

¡Hola a todos! Soy un desarrollador principiante de C# y me encontré con un problema. Uso ReSharper y noté que muestra una advertencia: «Virtual member call in a constructor». Tengo una clase base `Animal` y una derivada `Dog`. En el constructor de `Animal` llamo al método virtual `Speak()` para establecer un nombre predeterminado. Aquí está el ejemplo: ```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!"); } } ``` Cuando creo `Dog dog = new Dog();`, espero que el nombre sea "Buddy", pero a veces obtengo un comportamiento inesperado. ¿Por qué sucede esto? Después de todo, el constructor de la clase base se llama antes que el constructor