在C#中为虚拟属性添加一个setter

我有这样的情况:
public abstract class BaseClass 
{
   public abstract string MyProp { get; }
}

现在,对于某些派生类,属性值是一个合成值,所以没有setter:

public class Derived1 : BaseClass
{
    public override string MyProp { get { return "no backing store"; } }
}

这工作正常但是,某些派生类需要更传统的后台存储.但是,无论我如何写,如在自动属性或明确的后台存储,我得到一个错误

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’没有可覆盖的集合访问器

如何让这个工作?

解决方法

你可以做的最好的事情是实现属性为虚拟而不是抽象.在基类中为每个抛出的NotSupportedException引发get和set块,并在派生类中相应地覆盖该行为:
public virtual string MyProp {
    get {
        throw new NotSupportedException();
    }
    set {
        throw new NotSupportedException();
    }
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...