我有一个基于泛型集合的类型,它包含其他泛型类型:
class Collection<T>
{
}
class ItemType<K>
{
}
Collection<ItemType<string>> c = new Collection<ItemType<string>>();
有没有办法为Collection<T>
指定约束,使T
为任何类型ItemType
的{{1}}?有这样的假语法:
K
答案 0 :(得分:3)
烨
根据您的实际需要,您可以:
class Collection<T>{}
class ItemTypeCollection<T> : Collection<ItemType<T>>{}
或
class Collection<TContainer,TItem>
where TContainer : ItemType<TItem>
{
}
您选择哪一个取决于ItemType<T>
的衍生物是否具有与ItemType<T>
不同的界面
还有另外一种可能适合您的方法。但是,它有点复杂。
您可以创建非通用基类或接口,例如IItemType
,并使通用类ItemType<T>
实现非通用IItemType
。
然后你可以写
class Collection<T>
where T: IItemType{}
然后,如果您的IItemType
实施是通用的,则可以创建Collection<ItemType<T>>
。如果您尝试制作Collection<T>
且T
未实现IItemType
,则无法编译
答案 1 :(得分:3)
试试这个:
class ItemTypeCollection<T, K> : Collection<T> where T : ItemType<K>
{
}