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 に答える