Иерархии обобщенных классов

56

Обобщенные классы могут входить в иерархию классов аналогично необобщенным классам. Следовательно, обобщенный класс может действовать как базовый или производный класс. Главное отличие между иерархиями обобщенных и необобщенных классов заключается в том, что в первом случае аргументы типа, необходимые обобщенному базовому классу, должны передаваться всеми производными классами вверх по иерархии аналогично передаче аргументов конструктора.

В производном классе следует непременно указывать параметры типа, требующиеся его обобщенному базовому классу, даже если этот производный класс не обязательно должен быть обобщенным. Разумеется, в производный класс можно свободно добавлять его собственные параметры типа, если в этом есть потребность.

Ниже представлен пример создания сложной иерархии обобщенных классов:

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()
        {}
    }
}

Как видите обобщенный класс можно так же наследовать от необобщенного. Структура наследования обобщенных классов из вышеуказанного примера представлена ниже:

Структура наследования обобщенных классов
Пройди тесты
Лучший чат для C# программистов