ReSharper 2025.2 Help

代码检查:在构造函数中调用虚成员

正如 Eric Lippert 在 这篇文章中解释的那样,基类型的初始化程序在派生类型的初始化程序之后运行,但构造函数的执行顺序相反,也就是说,派生类型的构造函数在基类型的构造函数之后调用。 另一方面,对虚方法的调用始终在最派生的类型上执行。

这意味着,如果您在基类型的构造函数中调用虚成员,则派生类型中该虚成员的每个重写都会在 派生类型的构造函数被调用之前执行。

可以想象,如果派生类型中的重写使用了其成员,这可能会导致混淆和错误。

通常可以看到,在构造函数中调用虚方法是为了允许派生类型设置基类型的某些方面。 实际上,这样的虚方法应该是一个纯函数,它返回某个值并且不依赖于派生类型的状态。 如果是这种情况,请将此类函数设为静态函数(因为它是纯函数),并将其返回值作为参数传递给基类型的受保护构造函数。

最后修改日期: 2025年 9月 27日