Как иметь абстрактные и переопределяющие константы в С#?
Мой код ниже не будет компилироваться. Что я делаю не так? Я в основном пытаюсь иметь общедоступную константу, которая переопределяется в базовом классе.
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" из производного типа.