我遇到这样的情况:
public abstract class BaseClass
{
public abstract string MyProp { get; }
}
现在,对于某些派生类,properties值是一个综合值,因此没有setter:
public class Derived1 : BaseClass
{
public override string MyProp { get { return "no backing store"; } }
}
这很管用。但是,一些派生类需要更传统的备份存储。但是,无论我如何编写它,例如在automatic属性上,或者使用显式的后备存储,都会得到一个错误:
public class Derived2 : BaseClass
{
public override string MyProp { get; private set;}
}
public class Derived3 : BaseClass
{
private string myProp;
public override string MyProp
{
get { return myProp;}
private set { myProp = value;}
}
}
derived2.myprop.set”:无法重写,因为“baseClass.myprop”没有可重写的set访问器
我怎样才能让它工作?是吗?
最佳答案
最好的方法是将属性实现为virtual
而不是abstract
。为基类中的每个throwget
生成set
和NotSupportedException
块,并相应地重写派生类中的行为:
public virtual string MyProp {
get {
throw new NotSupportedException();
}
set {
throw new NotSupportedException();
}
}