Если у меня есть общий класс 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>();
Компилятор должен уметь выводить, что T является строкой, когда TItem является StringItem, правильно? Как это сделать?
Желаемое использование:
class MyItem : Item<string>
{
}
Container<MyItem> container = GetContainer();
MyItem item = container.GetItem(0);
item.MyMethod();