【发布时间】:2011-01-02 20:23:12
【问题描述】:
我有一个定义了get 的抽象类,但没有定义set,因为就该抽象类而言,它只需要一个get。
public abstract BaseClass
{
public abstract double MyPop
{get;}
}
但是,在某些派生类中,我需要一个set 属性,所以我正在研究这个实现
public class DClass: BaseClass
{
public override double MyPop
{get;set;}
}
问题是,我得到一个编译错误,说
*.set: 不能覆盖,因为 *.没有可覆盖的 set 访问器。
尽管我认为上述语法是完全合法的。
对此有任何想法吗?解决方法,或者为什么会这样?
编辑:我能想到的唯一方法是将get 和set 都放在抽象类中,如果调用set,则让子类抛出NotImplementedException这不是必需的。这是我不喜欢的东西,还有special setter method。
【问题讨论】:
-
让我们稍微分解一下。您需要构建一组类,这些类公开一个读取
double值的方法,该值将在每个类中专门实现。有时需要设置此值,因此其中一些类应公开设置此值的方法。这是正确的吗?您需要使用多少级继承? -
@Codesleuth:是的。至于有多少级继承,我不知道这与问题有什么关系?
-
@David,具有讽刺意味的是,这似乎是一个我不想接受答案的问题。
-
我不明白为什么接口可以做到这一点,但抽象类却不行。什么给了?
-
这太糟糕了。有谁明白为什么这是不可能的? get 和 set 属性在编译过程中确实被转换为方法等价物,不是吗?那么这些方法的虚拟性可以是孤立的事情吗?编辑:我想也许我在这里找到了答案:stackoverflow.com/questions/82437/…
标签: c#