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

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

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

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

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

38
задан Chris 9 March 2010 в 05:23
поделиться

3 ответа

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

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

public abstract string Bank { get; }

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

public override string Bank { get { return "Some bank"; } }
46
ответ дан 27 November 2019 в 03:38
поделиться

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

16
ответ дан 27 November 2019 в 03:38
поделиться

Если вы хотите продолжать использовать "const", небольшое изменение приведенного выше:

public abstract string Bank { get; } 

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

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

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

4
ответ дан 27 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: