财产覆盖与访问者

时间:2013-09-15 11:50:48

标签: c# .net properties override

我正在尝试向重写的属性添加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
        {
        }
    }
}

有解决方法吗?我确定我在这里错过了一些简单的东西。

2 个答案:

答案 0 :(得分:1)

不。

无法更改继承类中方法或属性的访问级别,也无法添加访问者。

这是我能想象到的唯一解决方法。

public class MyClass : MyBaseClass
{
    private int myField;

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

    private int MyPropertySetter
    {
        set { myField = value; }
    }
}

答案 1 :(得分: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
        {
        }
    }
}