Gen2
Console.WriteLine(g2.GetOb);
В этой иерархии классGen2 наследует от обобщенного классаGen.Обратите внимание на объявление классаGen2 в следующей строке кода.
class Gen2
Параметр типаТуказывается в объявлении классаGen2и в то же время передается классуGen.Это означает, что любой тип, передаваемый классуGen2,будет передаваться также классуGen.Например, в следующем объявлении:
Gen2
параметр типаstringпередается классуGen.Поэтому переменнаяobв той части классаGen2,которая относится к классуGen,будет иметь типstring.
Обратите также внимание на то, что в классеGen2параметр типаТне используется, а только передается вверх по иерархии базовому классуGen.Это означает, что в производном классе следует непременно указывать параметры типа, требующиеся его обобщенному базовому классу, даже если этот производный класс не обязательно должен быть обобщенным.
Разумеется, в производный класс можно свободно добавлять его собственные параметры типа, если в этом есть потребность. В качестве примера ниже приведен вариант предыдущей иерархии классов, где в классGen2добавлен собственный параметр типа.
// Пример добавления собственных параметров типа в производный класс, using System;
// Обобщенный базовый класс, class Gen
Т ob; // объявить переменную типа Т
// Передать конструктору ссылку типа Т. public Gen(T о) { ob = о;
}
// Возвратить значение переменной ob. public Т GetOb {
return ob;
}
}
// Класс, производный от класса Gen. В этом классе // определяется второй параметр типа V. class Gen2
V ob2;
public Gen2(T о, V o2) : base (o) {
ob2 = o2;
}
public V Get0bj2 { return ob2;
' }
}
// Создать объект класса Gen2 с параметрами // типа string и int.
Gen2
new Gen2
Console.Write(x.GetOb);
Console.WriteLine(x.GetObj2);
}
}
Обратите внимание на приведенное ниже объявление классаGen2в данном варианте иерархии классов.
class Gen2
В этом объявленииТ— это тип, передаваемый базовому классуGen;аV— тип, характерный только для производного классаGen2.Он служит для объявления объектаоЬ2и в качестве типа, возвращаемого методомGetOb j 2. В методеMain создается объект классаGen2с параметромТтипаstringи параметромVтипаint.Поэтому код из приведенного выше примера дает следующий результат.
Значение равно: 99
Обобщенный производный класс