下面的代码无法编译。我究竟做错了什么?我基本上试图在基类中重写一个公共常量。
public abstract class MyBaseClass
{
public abstract const string bank = "???";
}
public class SomeBankClass : MyBaseClass
{
public override const string bank = "Some Bank";
}
一如既往地感谢您的帮助!
答案 0 :(得分:45)
如果你的常量描述你的对象,那么它应该是一个属性。一个常数,就其名称而言,不应该改变,并且设计为不受多态性的影响。这同样适用于静态变量。
您可以在基类中创建一个抽象属性(如果需要默认值,则为虚拟属性):
public abstract string Bank { get; }
然后覆盖:
public override string Bank { get { return "Some bank"; } }
答案 1 :(得分:15)
您要做的事情无法完成。无法覆盖static
和const
。只能覆盖实例属性和方法。
您可以将bank
字段转换为属性并将其作为抽象方式推销,如下所示:
public abstract string Bank { get; }
然后你将像你一直在做的那样在你继承的类中覆盖它
public override string Bank { get { return "Charter One"; } }
希望这会对你有所帮助。另一方面,您也可以
public const string Bank = "???";
然后继承类
public const string Bank = "Charter One";
由于static
和const
在多态性之外运行,因此无需重写。
答案 2 :(得分:3)
如果您想继续使用“const”,请稍微修改上述内容:
public abstract string Bank { get; }
然后覆盖:
private const string bank = "Some Bank";
public override string Bank { get { return bank;} }
然后属性将从派生类型返回“const”。