在构造函数中访问已实现的抽象属性会导致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; }
那时我希望警告消失。