如何在C#中使用抽象和重写常量?

时间:2010-03-09 05:23:16

标签: c# polymorphism constants

下面的代码无法编译。我究竟做错了什么?我基本上试图在基类中重写一个公共常量。

public abstract class MyBaseClass
{
  public abstract const string bank = "???";
}

public class SomeBankClass : MyBaseClass
{
  public override const string bank = "Some Bank";
}

一如既往地感谢您的帮助!

3 个答案:

答案 0 :(得分:45)

如果你的常量描述你的对象,那么它应该是一个属性。一个常数,就其名称而言,不应该改变,并且设计为不受多态性的影响。这同样适用于静态变量。

您可以在基类中创建一个抽象属性(如果需要默认值,则为虚拟属性):

public abstract string Bank { get; }

然后覆盖:

public override string Bank { get { return "Some bank"; } }

答案 1 :(得分:15)

您要做的事情无法完成。无法覆盖staticconst。只能覆盖实例属性和方法。

您可以将bank字段转换为属性并将其作为抽象方式推销,如下所示:

public abstract string Bank { get; }

然后你将像你一直在做的那样在你继承的类中覆盖它

public override string Bank { get { return "Charter One"; } }

希望这会对你有所帮助。另一方面,您也可以

public const string Bank = "???";

然后继承类

public const string Bank = "Charter One";

由于staticconst在多态性之外运行,因此无需重写。

答案 2 :(得分:3)

如果您想继续使用“const”,请稍微修改上述内容:

public abstract string Bank { get; } 

然后覆盖:

private const string bank = "Some Bank"; 
public override string Bank { get { return bank;} }  

然后属性将从派生类型返回“const”。