В методеCompareTo() вызывающий объект сравнивается с объектом
В приведенном ниже примере программы демонстрируется конкретная реализация интерфейсаIComparable.В этой программе интерфейсIComparableвводится в классInventory,разработанный в двух последних примерах из предыдущего раздела. В классеInventoryреализуется методCompareTo() для сравнения полейnameобъектов данного класса, что дает возможность отсортировать товарные запасы по наименованию. Как показано в данном примере программы, коллекция объектов класса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 ToStringO { 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 () товарные запасы оказываются отсортированными по наименованию.
Перечень товарных запасов до сортировки:
Реализация интерфейса IComparable для обобщенных коллекций