Первое появление example_of_stored_class
здесь - это параметр типа , поскольку он отображается в угловых скобках после имени класса в определении класса: по правилам C # вы говорите, что ModifiedClass
принимает параметр типа с именем example_of_stored_class
. Кто-то, использующий ваш класс, может предоставить любой фактический тип для этого параметра (по крайней мере, если все скомпилировано для начала):
var x = new ModifiedList<int>();
var y = new ModifiedList<String>();
Но тогда вы наследуете этот универсальный класс от другого универсального класса, где вы поставьте example_of_stored_class
в качестве значения параметра типа AdvancedList. Здесь мы не определяем AdvancedList, поэтому тип в угловых скобках интерпретируется как тип, который вы хотите использовать для параметра типа.
Вы нашли способ заставить example_of_stored_class
означать две разные вещи в одной строке, и возникла путаница.
public class ModifiedList<example_of_stored_class>
: AdvancedList<example_of_stored_class>
Это скомпилирует:
public class ModifiedList<T> : AdvancedList<example_of_stored_class>
{
public void someMethod()
{
}
}
Но я подозреваю, что вы действительно хотите, чтобы ModifiedList<T>
наследовал от AdvancedList<T>
с параметром типа с тем же :
public class ModifiedList<MyT> : AdvancedList<MyT>
{
public void someMethod()
{
}
}
Или это - вы хотите, чтобы example_of_stored_class был единственным параметром типа на рисунке. В этом случае ModifiedList не является универсальным. Он наследуется от «реализованного» универсального класса, класса, в котором уже есть параметр типа.
public class ModifiedList : AdvancedList<example_of_stored_class>
{
public void someMethod()
{
}
}