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:
不要在构造函数中调用可覆盖的方法。
这通常仅显示是否调用与构造函数在同一类中定义的虚方法。例如在MyProperty
的构造函数中访问MyBase
。在这里,我在派生类的构造函数中调用继承的抽象属性的非虚拟重写实现。
答案 0 :(得分:10)
不,它仍然是虚拟的,因为override
没有隐含地封锁该成员。 (尝试一下:从MyClass
派生另一个类,然后再次覆盖MyProperty
。)
你可以明确地密封它:
public override sealed bool MyProperty
{
get;
protected set;
}
此时我希望警告消失。