包含在派生类中创建的通用实例的基类?

时间:2012-07-02 21:46:58

标签: c#-4.0

我正在试图弄清楚这是否可行。

我有一个类BaseGameEntity,我现在派生出NormalDrop和OtherDrop,每个都有一个StateMachine的实例< T>其中T分别是NormalDrop和OtherDrop。

从这里可以调用相关的状态,适用于那些类型的丢弃。

我想要做的是在Drop类中添加另一个层,它派生自BaseGameEntity,其他形式的drop然后派生自。

在Drop中我想要一个StateMachine< T>其中“T”变为NormalDrop或OtherDrop,具体取决于使用它作为基类的内容。

这实际上可行吗?

1 个答案:

答案 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