Если реализуется именно такой вариант интерфейсаISeries,в реализующем его классе следует указать то же самое ограничение на параметр типаТ,как показано ниже.
class ByTwos
В силу ограничения ссылочного типа этот вариант интерфейсаISeriesнельзя применять к типам значений. Поэтому если реализовать его в рассматриваемом здесь примере программы, то допустимым окажется только объявлениеByTwos
Сравнение экземпляров параметра типа
Иногда возникает потребность сравнить два экземпляра параметра типа. Допустим, что требуется написать обобщенный методIs In , возвращающий логическое значениеtrue,если в массиве содержится некоторое значение. Для этой цели сначала можно попробовать сделать следующее.
// Не годится!
public static bool IsIn
if(v == what) // Ошибка! return true;
return false;
}
К сожалению, эта попытка не пройдет. Ведь параметрТотносится к обобщенному типу, и поэтому компилятору не удастся выяснить, как сравнивать два объекта. Требуется ли для этого поразрядное сравнение или же только сравнение отдельных полей? А возможно, сравнение ссылок? Вряд ли компилятор сможет найти ответы на эти вопросы. Правда, из этого положения все же имеется выход.
Для сравнения двух объектов параметра обобщенного типа они должны реализовывать интерфейсIComparableилиIComparable
public interface IEquatable
Сравниваемый тип данных передается ему в качестве аргумента типаТ.В этом интерфейсе определяется методEquals , как показано ниже.
bool Equals(Т
В этом методе сравниваются вызывающий объект и другой объект, определяемый параметром