2011-04-03 212 views
1

我必須保持其他泛型類型泛型集合基於類型:指定類型約束上的通用泛型類型

class Collection<T> 
{ 
} 

class ItemType<K> 
{ 
} 

Collection<ItemType<string>> c = new Collection<ItemType<string>>(); 

是否有指定Collection<T>這樣T約束的方式是一種ItemType與任何類型的K?有點像這樣用假語法:

class Collection<T> where T : ItemType<> 
{ 
} 
+0

更新我的回答,我認爲與非通用接口的解決辦法是什麼你在之後 – smartcaveman 2011-04-03 06:20:46

回答

3

根據你的實際需要,你可以這樣做:

class Collection<T>{} 
    class ItemTypeCollection<T> : Collection<ItemType<T>>{} 

class Collection<TContainer,TItem> 
     where TContainer : ItemType<TItem> 
    { 

    } 

你選哪一個取決於ItemType<T>的衍生物是否具有與不同的界面

還有一種方法可能適用於您。但是,這有點複雜。

您可以創建一個非通用基類或接口,如IItemType,並使通用類ItemType<T>實現該非通用IItemType

然後,你可以寫

class Collection<T> 
     where T: IItemType{} 

然後,如果你IItemType實現是通用的,你可以創建一個Collection<ItemType<T>>。如果你試圖讓一個Collection<T>T沒有實現IItemType,那麼它將無法編譯

3

試試這個:

class ItemTypeCollection<T, K> : Collection<T> where T : ItemType<K> 
{ 
}