Иерархии обобщенных классов
Обобщенные классы могут входить в иерархию классов аналогично необобщенным классам. Следовательно, обобщенный класс может действовать как базовый или производный класс. Главное отличие между иерархиями обобщенных и необобщенных классов заключается в том, что в первом случае аргументы типа, необходимые обобщенному базовому классу, должны передаваться всеми производными классами вверх по иерархии аналогично передаче аргументов конструктора.
В производном классе следует непременно указывать параметры типа, требующиеся его обобщенному базовому классу, даже если этот производный класс не обязательно должен быть обобщенным. Разумеется, в производный класс можно свободно добавлять его собственные параметры типа, если в этом есть потребность.
Ниже представлен пример создания сложной иерархии обобщенных классов:
using System; namespace ConsoleApplication1 { class Class1<T> { } // Унаследованный обобщенный класс class Class2_1<T> : Class1 { } // Ещё один унаследованный класс с собственными параметрами class Class2_2<T, V> : Class1 { } class Class3<T, V, E, G> : Class2_2 { } // Обычный необобщенный класс class SomeClass { } // Унаследованный от обычного класса обобщенный класс class ObClass<T> : SomeClass { } class Program { static void Main() {} } }
Как видите обобщенный класс можно так же наследовать от необобщенного. Структура наследования обобщенных классов из вышеуказанного примера представлена ниже:
Комментарии