Как лучше всего инициализировать константы или другие поля в унаследованных классах? Я понимаю, что в этом примере много синтаксических ошибок, но это лучший пример, чтобы четко объяснить, что я пытаюсь сделать.
public abstract class Animal {
public abstract const string Name; // #1
public abstract const bool CanFly;
public abstract double Price; // price is not const, because it can be modified
public void Fly() {
if (!CanFly)
Debug.Writeln("{0}s can't fly.", Name);
else
Debug.Writeln("The {0} flew.", Name);
}
}
public class Dog : Animal {
public override const string Name = "Dog"; // #2
public override const bool CanFly = false;
public override double Price = 320.0;
}
public class Bird : Animal {
public override const string Name = "Bird";
public override const bool CanFly = true;
public override double Price = 43.0;
}
Несколько вещей, которые я пытаюсь выполнить:
- Базовые классы должны назначить эти 3 поля.
- В идеале я хотел бы, чтобы эти инициализированные поля были вместе в верхней части класса, чтобы я мог видеть, какие константы я назначил каждому классу, и изменять их при необходимости.
- Поля Name и CanFly не могут быть изменены.
Я знаю, что вы можете инициализировать эти поля в конструкторе (если вы избавитесь от const), но тогда они не гарантированно будут назначены. Если вместо этого вы используете эти поля в качестве свойств и переопределяете их, вам все равно придется инициализировать вспомогательное поле свойства. Как бы вы это реализовали?
Несколько синтаксических ошибок, на которые он жалуется:
- Модификатор 'abstract' недопустим в полях. Попробуйте вместо этого использовать свойство. (# 1)
- В поле const необходимо указать значение (# 1)
- Модификатор 'override' недопустим для этого элемента (# 2)