Книга: C# 4.0: полное руководство

Обобщенный класс с двумя параметрами типа

Обобщенный класс с двумя параметрами типа

В классе обобщенного типа можно указать два или более параметра типа. В этом случае параметры типа указываются списком через запятую. В качестве примера ниже приведен класс 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. Ясно, что если бы аргументы были одного и того же типа, то два параметра типа были бы не нужны.

Оглавление книги


Генерация: 1.354. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз