1

オーバーライドされたプロパティにアクセサーを追加しようとしてprivate setいますが、コンパイル時にエラーが発生します:

does not have an overridable set accessor

インターフェイスと抽象基本クラスにアクセサーを追加setしますが、アクセス レベルを設定するため、インターフェイスまたは抽象プロパティに追加できないアクセサーをプライベートにする必要があります。

私が意味することの例は以下のとおりです。

public interface IMyInterface
{
    int MyProperty
    {
        get;
    }
}

public abstract class MyBaseClass : IMyInterface
{
    public abstract int MyProperty
    {
        get;
    }
}

public class MyClass : MyBaseClass
{
    public override int MyProperty
    {
        get
        {
            return 0;
        }
        private set // does not have an overridable set accessor
        {
        }
    }
}

これを回避する方法はありますか?ここで単純なものが欠けていると確信しています。

4

2 に答える 2

1

いいえ。

継承されたクラスのメソッドまたはプロパティのアクセス レベルを変更したり、アクセサーを追加したりする方法はありません。

これは私が想像できる唯一の回避策です。

public class MyClass : MyBaseClass
{
    private int myField;

    public override int MyProperty
    {
        get { return myField; }          
    }

    private int MyPropertySetter
    {
        set { myField = value; }
    }
}
于 2013-09-15T11:58:43.710 に答える