- •939 Сторінка в djvu 54 сторінка
- •Int Count { get; } bool IsReadOnly { get; }
- •Int Compare(т х, т у)
- •Int CompareTo(object obj)
- •Int CompareTo(т other)
- •Int Compare(object X, object y)
- •Int Compare(т х, т у)
- •Inv.Add(new Inventory("Викрутки", 8.29, 2)); inv.Add(new Inventory("Молотки", 3.50, 4)); inv.Add(new Inventory("Дриля", 19.88, 8));
- •Void Reset()
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 ().
