Книга: 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
. Ясно, что если бы аргументы были одного и того же типа, то два параметра типа были бы не нужны.
- Что такое обобщения
- Простой пример обобщений
- Обобщенный класс с двумя параметрами типа
- Общая форма обобщенного класса
- Получение значения, присваиваемого параметру типа по умолчанию
- Обобщенные структуры
- Создание обобщенного метода
- Обобщенные делегаты
- Обобщенные интерфейсы
- Сравнение экземпляров параметра типа
- Иерархии обобщенных классов
- Переопределение виртуальных методов в обобщенном классе
- Перегрузка методов с несколькими параметрами типа
- Ковариантность и контравариантность в параметрах обобщенного типа
- Создание экземпляров объектов обобщенных типов
- Некоторые ограничения, присущие обобщениям
- Заключительные соображения относительно обобщений
- Перегрузка методов с несколькими параметрами типа
- Использование CAST() с типами дата
- Создание столбцов и работа с типами содержимого
- Пропуск параметров типа
- Как быстро переключаться между двумя пользователями, не закрывая их программ?
- 3.2. Ключи типа key_t и функция ftok
- Как в документе Microsoft Word изменить расстояние между двумя словами?
- Отношения типа многие-ко-многим
- Глава 6 Работа с параметрами библиотек
- Отношения типа один-ко-многим
- Эксперименты с числовыми типами данных
- Атаки типа «отказ в обслуживании» (DoS) и «распределенный отказ в обслуживании» (DDoS)