Обобщенный класс с двумя параметрами типа
В классе обобщенного типа можно указать два или более параметра типа. В этом случае параметры типа указываются списком через запятую. В качестве примера ниже приведен класс TwoGen, являющийся вариантом класса Gen с двумя параметрами типа.
// Простой обобщенный класс с двумя параметрами типа Т и V.
using System;
class TwoGen<T, V> {
T ob1;
V ob2;
// Обратите внимание на то, что в этом конструкторе
// указываются параметры типа Т и V.
public TwoGen(T o1, V o2) {
ob1 = o1;
ob2 = o2;
}
// Показать типы Т и V.
public void showTypes() {
Console.WriteLine("К типу T относится " + typeof(T));
Console.WriteLine("К типу V относится " + typeof(V));
}
public T getob1() {
return ob1;
}
public V GetObj2() {
return ob2;
}
}
// Продемонстрировать применение обобщенного
// класса с двумя параметрами типа,
class SimpGen {
static void Main() {
TwoGen<int, string> tgObj =
new TwoGen<int, string>(119, "Альфа Бета Гамма");
// Показать типы.
tgObj.showTypes();
// Получить и вывести значения,
int v = tgObj.getob1();
Console.WriteLine("Значение: " + v);
string str = tgObj.GetObj2();
Console.WriteLine("Значение: " + str);
}
}
Эта программа дает следующий результат.
К типу Т относится System.Int32
К типу V относится System.String
Значение: 119
Значение: Альфа Бета Гамма
Обратите внимание на то, как объявляется класс TwoGen.
class TwoGen<T, V> {
В этом объявлении указываются два параметра типа Т и V, разделенные запятой. А поскольку у класса TwoGen два параметра типа, то при создании объекта этого класса необходимо указывать два соответствующих аргумента типа, как показано ниже.
TwoGen<int, string> tgObj =
new TwoGen<int, string>(119, "Альфа Бета Гамма");
В данном случае вместо Т подставляется тип int, а вместо V — тип string.
В представленном выше примере указываются аргументы разного типа, но они могут быть и одного типа. Например, следующая строка кода считается вполне допустимой.
TwoGen<string, string> х =
new TwoGen<string, string>("Hello", "Goodbye");
В этом случае оба типа, Т и V, заменяются одним и тем же типом, string. Ясно, что если бы аргументы были одного и того же типа, то два параметра типа были бы не нужны.