Ответ Джонатона верен, но, возможно, предлагаемое решение не совсем то, что вы хотите.
Может быть, вы просто хотите не универсальный тип, который наследует закрытый универсальный тип:
class MyDerivedList : MyList<MyDerivedItem>
А теперь ваш код будет работать как положено:
class MyDerivedList : MyList<MyDerivedItem>
{
int GetID(int index)
{
return ItemList[index].ID;
}
string GetName(int index)
{
return ItemList[index].Name;
}
}
Вопреки вашей попытке, в приведенном выше коде MyDerivedItem
действительно является типом MyDerivedItem
, а не параметром универсального типа универсального класса MyDerivedList<>
.
Смешение? Да, именно поэтому вы должны избегать именования параметров общего типа с именами типов, это может повредить вашей голове; Ваш код и следующее абсолютно совпадают:
class MyDerivedList<T> : MyList<T>
Но теперь тот факт, что T
является параметром общего типа, а не конкретным типом, очевиден.