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