2012-07-02 60 views
1

我想弄清楚這是否可能。包含在派生類中創建的泛型實例的基類?

我有一個類,BaseGameEntity,從此我目前派生NormalDrop和OtherDrop,其中每個都有一個StateMachine實例< T>其中T分別是NormalDrop和OtherDrop。

從這裏可以調用適用於這些類型的下降的相關狀態。

我想要做的是將另一層放在Drop類中,該類從BaseGameEntity派生,然後派生出其他形式的Drop。

下降我想要一個StateMachine < T>其中「T」成爲NormalDrop或OtherDrop,具體取決於使用它作爲其基類。

這實際上可能嗎?

回答

1

是的,你可以使用curiously recurring template pattern

public class Drop<T> where T : Drop<T> { ... } 
public class NormalDrop : Drop<NormalDrop> { ... } 
public class OtherDrop : Drop<OtherDrop> { ... } 

然後投遞基類T內部總是NormalDrop或OtherDrop。

這種模式一般不被認爲是開發者友好的,因爲乍一看它很混亂,並且可能有更好的方法來構造代碼(儘管可能不總是)。 Eric Lippert寫了一篇關於這種模式的非常好的博客文章,以及它的一些缺點here

+0

模式的神奇名稱和一個夢幻般的和快速的答案,謝謝一堆! –

+0

@JoshuaMee謝謝,我的榮幸。歡迎來到SO! –