我正在试图弄清楚这是否可行。
我有一个类BaseGameEntity,我现在派生出NormalDrop和OtherDrop,每个都有一个StateMachine的实例< T>其中T分别是NormalDrop和OtherDrop。
从这里可以调用相关的状态,适用于那些类型的丢弃。
我想要做的是在Drop类中添加另一个层,它派生自BaseGameEntity,其他形式的drop然后派生自。
在Drop中我想要一个StateMachine< T>其中“T”变为NormalDrop或OtherDrop,具体取决于使用它作为基类的内容。
这实际上可行吗?
答案 0 :(得分:1)
是的,您可以使用curiously recurring template pattern:
public class Drop<T> where T : Drop<T> { ... }
public class NormalDrop : Drop<NormalDrop> { ... }
public class OtherDrop : Drop<OtherDrop> { ... }
然后在Drop基类中,T始终是NormalDrop或OtherDrop。
这种模式通常不被认为是开发人员友好的,因为乍一看它很混乱,并且可能有更好的方法来构造代码(尽管可能并非总是如此)。 Eric Lippert撰写了一篇关于这种模式的非常好的博客文章及其一些缺点here。