Chamada de método virtual no construtor: qual o perigo e como evitar?
Olá a todos! Sou um desenvolvedor C# iniciante e recentemente o ReSharper começou a me mostrar um aviso "Virtual member call in a constructor" para 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)
{
// Vazio
}
public override void Initialize(string name)
{
base.Initialize(name);
Breed = "Unknown";
Console.WriteLine("Dog initialized");
}
}
```
O código parece funcionar e exibe as mensagens esperadas, mas o ReSharper destaca a chamada `Initialize(name)` no construtor de `Animal`. Não entendo qual é o problema. Afinal, métodos virtuais existem para serem sobres