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

本文关键字:构造函数 调用 方法 可重写 CA2214 访问 实现 抽象 属性 | 更新日期: 2023-09-27 18:17:33

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

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

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

你可以显式地密封它:

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

在那个时候,我希望警告消失。