Как иметь абстрактные и переопределенные константы в C #? - PullRequest
36 голосов
/ 09 марта 2010

Мой код ниже не скомпилируется. Что я делаю неправильно? Я в основном пытаюсь получить открытую константу, которая переопределяется в базовом классе.

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

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

Спасибо, как всегда, за помощь!

Ответы [ 3 ]

45 голосов
/ 09 марта 2010

Если ваша константа описывает ваш объект, то это должно быть свойство. Константа по своему названию не должна изменяться и была разработана так, чтобы не подвергаться воздействию полиморфизма. То же самое относится и к статической переменной.

Вы можете создать абстрактное свойство (или виртуальное, если вам нужно значение по умолчанию) в вашем базовом классе:

public abstract string Bank { get; }

Затем переопределите с помощью:

public override string Bank { get { return "Some bank"; } }
15 голосов
/ 09 марта 2010

То, что вы пытаетесь сделать, не может быть сделано. 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 работают вне полиморфизма, их не нужно переопределять.

3 голосов
/ 14 августа 2010

В случае, если вы хотите продолжать использовать «const», внесите небольшую модификацию вышеупомянутого:

public abstract string Bank { get; } 

Затем переопределите с помощью:

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

И свойство вернет ваш"const" из производного типа.

...