Например, у меня есть класс фабрики:C# - Как назначить enum как должно быть реализовано в абстрактном классе?
abstract class UnitFactory<T> where T:Unit
{
abstract enum UnitType;
public abstract T GetUnit(UnitType type);
}
Здесь, производный класс сусло иметь перечисление (конечно abstract enum
не работает), чтобы указать, какой тип блока он может сделать, вместо того, кучу строковых констант, которые, как мне кажется, трудно обеспечить/управлять.
Так что мой вопрос в том, как я могу сделать «аннотация» enum вот так? Или, если это невозможно, какова наилучшая практика сделать что-то подобное?
Извините за мой плохой английский и мой, казалось бы, глупый вопрос.
Edit: Sample дочерний класс:
class ArcherFactory : UnitFactory<Archer>
{
private static Archer _baseLongbowman = ....;
private static Archer _baseCrossbowman = ....;
// Child class must have a implementation of UnitType enum to
// tell the user that it can only make those kind of units.
public enum UnitType{ Longbowman, Crossbowman }
public override Archer getUnit(UnitType type)
{
if (type == UnitType.Longbowman) return _baseLongbowman.Clone(...);
return _baseCrossbowman.Clone(...);
}
}
Что d oes 'abstract enum' означает? Перечисления не поддерживают наследование. Они всего лишь значения –
enum - тип значения, к сожалению, вы ничего не можете извлечь из него –
Это звучит как случай проблемы [XY] (http://meta.stackexchange.com/questions/66377/what- это-The-ху-проблема). Имея проблему с X, предполагая, что Y - это решение (абстрактные перечисления), и когда это не работает, запрос Y, а не фактическая проблема X. Какова фактическая проблема? –