Avatar ·

在构造函数中调用虚方法:有什么危险以及如何避免?

大家好!我是一名初学 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)` 调用。我不明白问题出在哪里。毕竟虚方法就是为了被重写而存在的。