用于clr属性的setter,该属性在仅具有getter的抽象基类中定义

时间:2010-06-19 10:23:36

标签: c# .net

有没有办法为只有getter的抽象基类中定义的clr-property声明一个setter(反之亦然)?

abstract class BaseClass {
    public abstract string Test {
        get;
    }
}

class ConcreteClass : BaseClass{
    public override string Test {
        get { return string.Empty; }
        set { /* Some code*/} // This would be really pratically
    }
}

同样的问题可能会被要求标记为虚拟的属性。

2 个答案:

答案 0 :(得分:4)

幸运的是,这是不可能的。您无法更改现有定义/合同。

有很多方法,比如new关键字。或使用界面。

答案 1 :(得分:2)

可能有一种解决方法。

在基类中声明受保护的setter,然后在具体类中实现它。

像这样:

abstract class Base
{
    public abstract string Test { get; protected set; }

}

class Concrete : Base
{
    string s;
    public override string Test
    {
        get { return s; }
        protected set { s = value; }
    }
}

......但很漂亮,不是: - )