【发布时间】:2016-10-04 12:09:07
【问题描述】:
例如,我有一个工厂类:
abstract class UnitFactory<T> where T:Unit
{
abstract enum UnitType;
public abstract T GetUnit(UnitType type);
}
这里,派生类必须有一个枚举(当然abstract enum不起作用)来指示它可以制作哪种单元,而不是我认为的一堆字符串常量难以执行/管理。
所以我的问题是如何制作这样的 "abstract" 枚举?或者如果不可能,做类似事情的最佳做法是什么?
抱歉我的英语不好和我看似愚蠢的问题。
编辑: 示例子类:
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(...);
}
}
【问题讨论】:
-
abstract enum是什么意思?枚举不支持继承。它们只是价值观 -
enum 是一个值类型,遗憾的是你不能从中派生任何东西
-
这听起来像是XY Problem 的情况。 X 有问题,假设 Y 是解决方案(抽象枚举),当这不起作用时,要求 Y,而不是实际问题 X。实际问题是什么?
-
我明白了,我只是想要一个“抽象枚举”之类的东西,一个必须实现的枚举。
-
@Tr1et:什么是“已实现的枚举”?提供一个示例,说明您将如何 1) 实例化多个具体工厂和 2) 为工厂/单元类型的几种组合调用
GetUnit。