Llamada a método virtual en el constructor: ¿cuál es el peligro y cómo evitarlo?
¡Hola a todos! Soy un desarrollador principiante de C# y recientemente ReSharper comenzó a mostrarme la advertencia "Virtual member call in a constructor" en este código:
```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)
{
// Vacío
}
public override void Initialize(string name)
{
base.Initialize(name);
Breed = "Unknown";
Console.WriteLine("Dog initialized");
}
}
```
Aparentemente el código funciona y muestra los mensajes esperados, pero ReSharper resalta la llamada a `Initialize(name)` en el constructor de `Animal`. No entiendo cuál es el problema. Después de todo, los métodos virtuales existen para ser sobrescritos.