在构造函数中访问已实现的抽象属性会导致CA2214:不要在构造函数中调用可覆盖的方法

public abstract class MyBase { public abstract bool MyProperty { get; protected set; } } public class MyClass : MyBase { public MyClass() { this.MyProperty = true; } public override bool MyProperty { get; protected set; } } 

构造函数MyClass()导致CA2214:

不要在构造函数中调用可覆盖的方法。

这通常仅显示是否调用与构造函数在同一类中定义的虚方法。 例如,在MyBase的构造函数中访问MyProperty 。 这里我在派生类的构造函数中调用inheritance的抽象属性的非虚拟重写实现

不,它仍然是虚拟的,因为override不会隐含地隐藏成员。 (试一试:从MyClass派生另一个类,你可以再次覆盖MyProperty 。)

你可以明确地密封它:

 public override sealed bool MyProperty { get; protected set; } 

那时我希望警告消失。