Как иметь абстрактные и переопределяющие константы в С#?

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

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

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

Спасибо, что всегда так полезно!

Ответ 1

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

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

public abstract string Bank { get; }

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

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

Ответ 2

То, что вы пытаетесь сделать, не может быть сделано. 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

В случае, если вы хотите использовать "const", слегка измените это:

public abstract string Bank { get; } 

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

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

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