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 回答
1

好吧,您不能修改继承链中的访问器。所以更好的选择是protected set accessor在你的基类中添加一个。这将允许您覆盖派生类中的实现。

我的意思是这样的

public interface IMyInterface
{
    int MyProperty
    {
        get;
    }
}

public abstract class MyBaseClass : IMyInterface
{
    public abstract int MyProperty
    {
        get;
        protected set;<--add set accessor here
    }
}

public class MyClass : MyBaseClass
{
    public override int MyProperty
    {
        get
        {
            return 0;
        }
        protected set //this works
        {
        }
    }
}
于 2013-09-15T12:35:53.030 回答