如果我有一个看起来像这样的通用 Item 类:
abstract class Item<T>
{
}
还有一个看起来像这样的项目容器:
class Container<TItem, T>
where TItem : Item<T>
{
}
由于 TItem 依赖于 T,是否可以简化 Container 的类型签名,使其只接受一个类型参数?我真正想要的是这样的:
class Container<TItem>
where TItem : Item // this doesn't actually work, because Item takes a type parameter
{
}
所以我可以按如下方式实例化它:
class StringItem : Item<string>
{
}
var good = new Container<StringItem>();
var bad = new Container<StringItem, string>();
当 TItem 是 StringItem 时,编译器应该能够推断出 T 是字符串,对吧?我该如何做到这一点?
所需用途:
class MyItem : Item<string>
{
}
Container<MyItem> container = GetContainer();
MyItem item = container.GetItem(0);
item.MyMethod();