Пример 1. Обобщенный класс using System;
// В приведенном ниже классе Gen параметр типа Т заменяется
// реальным типом данных при создании объекта типа Gen.
class Gen {
T ob; // объявить переменную типа Т
// Обратите внимание на то, что у этого конструктора имеется параметр типа Т.
public Gen(T о)
{
ob = о;
}
// Возвратить переменную экземпляра ob, которая относится к типу Т.
public T GetOb()
{
return ob;
}
// Показать тип Т.
public void ShowType()
{
Console.WriteLine("К типу T относится " + typeof(T));
}
}
// Продемонстрировать применение обобщенного класса.
class GenericsDemo
{
static void Main()
{
// Создать переменную ссылки на объект Gen типа int.
Gen iOb;
// Создать объект типа Gen и присвоить ссылку на него переменной iOb.
iOb = new Gen(102);
// Показать тип данных, хранящихся в переменной iOb.
iOb.ShowType();
// Получить значение переменной iOb.
int v = iOb.GetOb();
Console.WriteLine("Значение: " + v);
Console.WriteLine();
// Создать объект типа Gen для строк.
Gen strOb = new Gen("Обобщения повышают эффективность.");
// Показать тип данных, хранящихся в переменной strOb.
strOb.ShowType();
// Получить значение переменной strOb.
string str = strOb.GetOb();
Console.WriteLine("Значение: " + str);
}
}
Пример 2. Простой обобщенный класс с двумя параметрами типа Т и V.
using System;
class TwoGen {
T ob1;
V ob2;
// Обратите внимание на то, что в этом конструкторе
// указываются параметры типа Т и V.
public TwoGen(T o1, V о2)
{
ob1 = o1;
ob2 = о2;
}
// Показать типы Т и 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 tgObj =
new TwoGen(119, "Альфа Бета Гамма");
// Показать типы.
tgObj.showTypes();
// Получить и вывести значения.
int v = tgObj.getob1();
Console.WriteLine("Значение: " + v);
string str = tgObj.GetObj2();
Console.WriteLine("Значение: " + str);
}
}