В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметромobj.Если значение вызывающего объекта больше, чем у объектаobj,то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объектаobj,— отрицательное значение.

ИнтерфейсIComparableявляется обобщенным вариантом интерфейсаIComparable.Поэтому в нем определен следующий обобщенный вариант методаCompareTo().

int CompareTo(Тother)

Обобщенный вариант методаCompareTo() действует аналогично необобщенному его варианту. В нем значение вызывающего объекта также сравнивается со значением объекта, определяемого параметромother.Если значение вызывающего объекта больше, чем у объектаother,то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объектаother,— отрицательное значение. Преимущество интерфейсаIComparableзаключается в том, что он'обеспечивает типовую безопасность, поскольку в этом случае тип обрабатываемых данных указывается явным образом, а следовательно, никакого приведения типаobjectсравниваемого объекта к нужному типу не требуется. В качестве примера ниже приведена программа, в которой демонстрируются сортировка и поиск в массиве объектов определяемого пользователем класса.

// Отсортировать массив объектов и осуществить в нем поиск, using System;

class MyClass : IComparable { public int i;

public MyClass(int x) { i = x; }

// Реализовать интерфейс IComparable. public int CompareTo(MyClass v) { return i - v.i;

}

public bool Equals(MyClass v) { return i == v.i;

}

class SortDemo {

static void Main() {

MyClass[] nums = new MyClass[5];

nums[0] = new MyClass(5); nums[l] = new MyClass (2); nums[2] = new MyClass (3); nums[3] = new MyClass(4); nums[4] = new MyClass(1);

// Отобразить исходный порядок следования.

Console.Write("Исходный порядок следования: "); foreach(MyClass о in nums)

Console.Write(о.i + " ");

Console.WriteLine ();

// Отсортировать массив.

Array.Sort(nums);

// Отобразить порядок следования после сортировки.

Console.Write("Порядок следования после сортировки: "); foreach(MyClass о in nums)

Console.Write(о.i + " ");

Console.WriteLine ();

// Найти объект MyClass (2).

MyClass x = new MyClass (2);

int idx = Array.BinarySearch(nums, x);

Console.WriteLine("Индекс элемента массива с объектом MyClass(2): " + idx) ;

}

}

При выполнении этой программы получается следующий результат.

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

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