Для сравнения двух объектов параметра обобщенного типа они должны реализовывать интерфейсIComparableилиIComparableи/или интерфейсIEquatable.В обоих вариантах интерфейсаIComparableдля этой цели определен методСошрагеТо (), а в интерфейсеIEquatable— методEquals (). Разновидности интерфейсаIComparableпредназначены для применения в тех случаях, когда требуется определить относительный порядок следования двух объектов. А интерфейсIE qua tableслужит для определения равенства двух объектов. Все эти интерфейсы определены в пространстве именSystemи реализованы во встроенных в C# типах данных, включаяint, stringиdouble.Но их нетрудно реализовать и для собственных создаваемых классов. Итак, начнем с обобщенного интерфейсаIEquatable.ИнтерфейсIEquatableобъявляется следующим образом.

public interface IEquatable

Сравниваемый тип данных передается ему в качестве аргумента типаТ.В этом интерфейсе определяется методEquals (), как показано ниже.

bool Equals(Тother)

В этом методе сравниваются вызывающий объект и другой объект, определяемый параметромother.В итоге возвращается логическое значениеtrue,если оба объекта равны, а иначе — логическое значениеfalse.

В ходе реализации интерфейсаIEquatableобычно требуется также переопределять методыGetHashCode() иEquals (Object),определенные в классеObject,чтобы они оказались совместимыми с конкретной реализацией методаEquals ().Ниже приведен пример программы, в которой демонстрируется исправленный вариант упоминавшегося ранее методаIs In ().

// Требуется обобщенный интерфейс IEquatable.

public static bool IsIn(T what, T[] obs) where T : IEquatable { foreach(T v in obs)

if(v.Equals(what)) // Применяется метод Equals(). return true;

return false;

}

Обратите внимание в приведенном выше примере на применение следующега ограничения.

where Т : IEquatable

Это ограничение гарантирует, что только те типы, в которых реализован интерфейсIEquatable,являются действительными аргументами типа для методаIs In (). Внутри этого метода применяется методEquals (), который определяет равенство одного объекта другому.

Для определения относительного порядка следования двух элементов применяется интерфейсI Comp а г able.У этого интерфейса имеются две формы: обобщенная и необобщенная. Обобщенная форма данного интерфейса обладает преимуществом обеспечения типовой безопасности, и поэтому мы рассмотрим здесь именно ее. Обобщенный интерфейсIComparableобъявляется следующим образом.

public interface IComparable

Перейти на страницу:

Похожие книги