在构造函数中调用虚方法:有什么危险以及如何避免?
大家好!我是一名初学 C# 的开发者,最近 ReSharper 开始对以下代码发出警告“在构造函数中调用虚拟成员”:
```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)
{
// 空
}
public override void Initialize(string name)
{
base.Initialize(name);
Breed = "Unknown";
Console.WriteLine("Dog initialized");
}
}
```
代码似乎能正常工作并输出预期的消息,但 ReSharper 高亮了 `Animal` 构造函数中的 `Initialize(name)` 调用。我不明白问题出在哪里。毕竟虚方法就是为了被重写而存在的。