我正在尝试向重写的属性添加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
{
}
}
}
有解决方法吗?我确定我在这里错过了一些简单的东西。
答案 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
{
}
}
}