【发布时间】:2015-09-03 20:33:40
【问题描述】:
我正在尝试有一个接口,它声明一个属性必须有一个 get:
public interface IValue {
public int Value { get; }
}
然后有一个抽象类也定义它,但保持抽象:
public abstract class BaseClass : IValue {
public abstract int Value { get; }
}
然后我想让一个子类定义getter并添加一个setter:
public class SubClass : BaseClass {
public int Value { get; set; }
}
我收到如下错误:
'SubClass.Value' hides inherited member `BaseClass.Value'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword
如果我尝试:
public class SubClass : BaseClass {
public override int Value { get; set; }
}
我明白了:
`SubClass.Value.set': cannot override because `BaseClass.Value' does not have an overridable set accessor
有什么方法可以让子类在继承自只定义 getter 的抽象类时可选地添加 setter?
更新:澄清一下,我知道我可以做的变通方法。我的目标是看看我能做到这一点的最干净的方法是什么。我不只是在 BaseClass 上抛出公共设置器的原因是因为 BaseClass 的某些子类可能没有公共设置器。最终目标基本上只是为它们常用的时间提供一个通用的 Value getter。
【问题讨论】:
-
接口的用途是什么?基类和继承都没有实现它。
-
IValue在这里做什么? :D -
只是为了让你的代码编译,你可以这样做
public class SubClass : BaseClass { public override int Value { get; private set; } }。注意set是private。 -
@Sinatr 抱歉,BaseClass 实现了 IValue。
-
@deksii 问题是我想让 SubClass 使用公共设置器(尽管另一个 SubClass2 可能没有公共设置器),这就是为什么我不只是给 BaseClass 一个公共设置器。
标签: c# inheritance