}

// Возвратить значение переменной ob. public Т GetOb() { return ob;

}

}

// Класс, производный от класса Gen. class Gen2<T> : Gen<T> {

public Gen2(T o) : base(o) {

II ...

}

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;

' }

}

11 Создать объект класса Gen2. class GenHierDemo2 { static void Main() {

// Создать объект класса Gen2 с параметрами // типа string и int.

Gen2<string, in.t> x =

new Gen2<string, int>('Значение равно: ', 99);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату