Объект MyClass(1) находится в границах массива nums.
Объект MyClass(4) находится в границах массива nums.
Объект MyClass(0) НЕ находится в границах массива nums.
Объект MyClass(5) НЕ находится в границах массива nums.
ПРИМЕЧАНИЕ
Если параметр типа обозначает ссылку или ограничение на базовый класс, то к экземплярам объектов, определяемых таким параметром типа, можно применять операторы == и ! =, хотя они проверяют на равенство только ссылки. А для сравнения значений придется реализовать интерфейс IComparable или же обобщенные интерфейсы IComparable
Иерархии обобщенных классов
Обобщенные классы могут входить в иерархию классов аналогично необобщенным классам. Следовательно, обобщенный класс может действовать как базовый или производный класс. Главное отличие между иерархиями обобщенных и необобщенных классов заключается в том, что в первом случае аргументы типа, необходимые обобщенному базовому классу, должны передаваться всеми производными классами вверх по иерархии аналогично передаче аргументов конструктора.
Применение обобщенного базового класса
Ниже приведен простой пример иерархии, в которой используется обобщенный базовый класс.
// Простая иерархия обобщенных классов, using System;
// Обобщенный базовый класс, class Gen
Т ob;
public Gen(Т о) { ob = о;
}
// Возвратить значение переменной ob. public Т GetOb() { return ob;
}
}
// Класс, производный от класса Gen. class Gen2
public Gen2(T o) : base(o) {
}
1
class GenHierDemo { static void Main() {
Gen2
Console.WriteLine(g2.GetOb());
В этой иерархии классGen2 наследует от обобщенного классаGen.Обратите внимание на объявление классаGen2 в следующей строке кода.
class Gen2
Параметр типаТуказывается в объявлении классаGen2и в то же время передается классуGen.Это означает, что любой тип, передаваемый классуGen2,будет передаваться также классуGen.Например, в следующем объявлении:
Gen2
параметр типаstringпередается классуGen.Поэтому переменнаяobв той части классаGen2,которая относится к классуGen,будет иметь типstring.
Обратите также внимание на то, что в классеGen2параметр типаТне используется, а только передается вверх по иерархии базовому классуGen.Это означает, что в производном классе следует непременно указывать параметры типа, требующиеся его обобщенному базовому классу, даже если этот производный класс не обязательно должен быть обобщенным.
Разумеется, в производный класс можно свободно добавлять его собственные параметры типа, если в этом есть потребность. В качестве примера ниже приведен вариант предыдущей иерархии классов, где в классGen2добавлен собственный параметр типа.