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