16

次のような一般的な 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();
4

2 に答える 2