10
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的构造函数。在这里,我在派生类的构造函数中调用继承的抽象属性的非虚拟重写实现

4

1 回答 1

10

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

你可以明确地密封它:

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

那时我希望警告会消失。

于 2013-06-10T07:26:06.930 回答