Мой код ниже не скомпилирует. Что я делаю неправильно? Я в основном пытаюсь иметь общедоступную константу, которая переопределяется в базовом классе.
public abstract class MyBaseClass
{
public abstract const string bank = "???";
}
public class SomeBankClass : MyBaseClass
{
public override const string bank = "Some Bank";
}
Спасибо как всегда за то, что были так полезны!
Если ваша константа описывает ваш объект, то это должно быть свойство. Константа, судя по ее имени, не должна изменяться и была разработана таким образом, чтобы на нее не влиял полиморфизм. То же самое касается статической переменной.
Вы можете создать абстрактное свойство (или виртуальное, если хотите значение по умолчанию) в своем базовом классе:
public abstract string Bank { get; }
Затем переопределите с помощью:
public override string Bank { get { return "Some bank"; } }
То, что вы пытаетесь сделать, невозможно. 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
работают вне полиморфизма, их не нужно переопределять.
Если вы хотите продолжать использовать "const", небольшое изменение приведенного выше:
public abstract string Bank { get; }
Затем переопределите с помощью:
private const string bank = "Some Bank";
public override string Bank { get { return bank;} }
И тогда свойство вернет вашу "const" из производный тип.