Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1391-1497.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
126.26 Кб
Скачать

Int CompareTo(object obj)

У методі CompareTo () зухвалий об'єкт рівняється з об'єктом obj. Для сортування об'єктів по наростаюча конкретна реалізація даного методу повинна повертати нульове значення, якщо значення порівнюваних об'єктів рівні; позитивне - якщо значення зухвалого об'єкта більше, ніж в об'єкта obj; і негативне - якщо значення зухвалого об'єкта менше, ніж в об'єкта obj. А для сортування по убутні можна звернути результат порівняння об'єктів. Якщо ж тип об'єкта obj не підходить для порівняння із зухвалим об'єктом, то в методі CompareTo () може бути сгенерировано виключення ArgumentException.

У наведеному нижче прикладі програми демонструється конкретна реалізація інтерфейсу IComparable. У цій програмі інтерфейс IComparable уводиться в клас Inventory, розроблений у двох останніх прикладах з попереднього розділу. У класі Inventory реалізується метод CompareTo () для порівняння полів паші об'єктів даного класу, що дає можливість відсортувати товарні запаси по найменуванню. Як показано в даному прикладі програми, колекція об'єктів класу Inventory підлягає сортуванню завдяки реалізації інтерфейсу IComparable у цьому класі.

// Реалізувати інтерфейс IComparable.

using System;

using System.Collections;

// Реалізувати неузагальнений варіант інтерфейсу IComparable. class Inventory : IComparable { string name; double cost; int onhand;

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

)

public override string ToString { return

String.Format("{0,-10)Вартість: {1,6:З} Наявність: {2}", name, cost, onhand);

}

// Реалізувати інтерфейс IComparable. public int CompareTo(object obj) {

Inventory b;

b = (Inventory) obj;

return name.CompareTo(b.name);

}

class IComparableDemo { static void Main() (

ArrayList inv = new ArrayList;

inv.Add(new Inventory("Гострозубці", 5.95, 3)); inv.Add(new Inventory("Викрутки", 8.29, 2)); inv.Add(new Inventory("Молотки", 3.50, 4)); inv.Add(new Inventory("Дриля", 19.88, 8));

Console.WriteLine("Перелік товарних запасів до сортування:"); foreach(Inventory i in inv) {

^Console.WriteLine(" " + i);

) '

Console.WriteLine();

// Відсортувати список, inv.Sort();

Console.WriteLine("Перелік товарних запасів після сортування:"); foreach(Inventory i in inv) {

Console.WriteLine(" " + i);

}

}

}

Нижче наведений результат виконання даної програми. Зверніть увагу на те, що після виклику методу Sort () товарні запаси виявляються відсортованими по найменуванню.

Перелік товарних запасів до сортування:

Перелік товарних запасів після сортування:

Дриля Вартість: $19.88 Наявність: 8

Гострозубці Вартість: $5.95 Наявність: 3

Молотки Вартість: $3.50 Наявність: 4

Викрутки Вартість: $8.29 Наявність: 2

Реалізація інтерфейсу IComparable для узагальнених колекцій

Якщо потрібно відсортувати об'єкти, що зберігаються в узагальненій колекції, то для цієї мети прийде реалізувати узагальнений варіант інтерфейсу IComparable<T>. У цьому варіанті інтерфейсу IComparable визначається наведена нижче узагальнена форма методу CompareTo ().

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]