我遇到这样的情况:

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生成setNotSupportedException块,并相应地重写派生类中的行为:

public virtual string MyProp {
    get {
        throw new NotSupportedException();
    }
    set {
        throw new NotSupportedException();
    }
}

08-26 01:06