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