次のような一般的な Item クラスがあるとします。
abstract class Item<T>
{
}
そして、次のような項目のコンテナ:
class Container<TItem, T>
where TItem : Item<T>
{
}
TItem は T に依存するため、Container の型シグネチャを単純化して型パラメーターを 1 つだけ取ることは可能ですか? 私が本当に欲しいのはこれです:
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();