Читаем C# 4.0 полное руководство - 2011 полностью

Для сортировки объектов определяемых пользователем классов зачастую проще всего реализовать в этих классах интерфейсIComparable.Тем не менее данную задачу можно решить и с помощью интерфейсаIComparer.Для этой цели необходимо сначала создать класс, реализующий интерфейсIComparer,а затем указать объект этого класса, когда потребуется сравнение.

ИнтерфейсIComparerсуществует в двух формах: обобщенной и необобщенной. Несмотря на сходство применения обеих форм данного интерфейса, между ними имеются некоторые, хотя и небольшие, отличия, рассматриваемые ниже.

Применение необобщенного интерфейса icomparer

В необобщенном интерфейсеIComparerопределяется только один метод,

Compare.

int Compare(object x, object y)

В методеCompare сравниваются объектыxиу.Для сортировки объектов по нарастающей конкретная реализация данного метода должна возвращать нулевое значение, если значения сравниваемых объектов равны; положительное — если значение объектахбольше, чем у объекта у; и отрицательное — если значение объектахменьше, чем у объекта у. А для сортировки по убывающей можно обратить результат сравнения объектов. Если же тип объекта х не подходит для сравнения с объектом у, то в методеCompareTo может быть сгенерировано исключениеArgumentException.

Объект типаIComparerможет быть указан при конструировании объекта классаSortedList,при вызове методаArrayList. Sort (IComparer),а также в ряде других мест в классах коллекций. Главное преимущество применения интерфейсаIComparerзаключается в том, что сортировке подлежат объекты тех классов, в которых интерфейсIComparableне реализуется.

Приведенный ниже пример программы является вариантом рассматривавшегося ранее необобщенного примера программы учета товарных запасов, переделанного с целью воспользоваться интерфейсомIComparerдля сортировки перечня товарных запасов. В этом варианте программы сначала создается классComp Inv,в котором реализуется интерфейсIComparerи сравниваются два объекта классаInventory.А затем объект классаComplnvуказывается в вызове методаSort для сортировки перечня товарных запасов.

using System;

using System.Collections;

// Создать объект типа IComparer для объектов класса Inventory, class CompInv : IComparer {

// Реализовать интерфейс IComparer. public int Compare(object x, object y) {

Inventory, a, b; a = (Inventory) x; b = (Inventory) y;

return string.Compare(a.name, b.name, StringComparison.Ordinal);

}

}

class Inventory { public string name; double cost; int onhand;

public Inventory(string n, double c, int h) { name = n; cost = c; onhand = h;

}

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

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

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT