2011-04-03 143 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> 
{ 
}