Сравнение объектов (интерфейс IComparable)

Интерфейс ICcmparable определен в пространстве имен System. Он содержит всего один метод CompareTo, возвращающий результат сравнения двух объектов — теку­щего и переданного ему в качестве параметра:

interface IComparable

{

int CompareTo(object obj)

}

Метод должен возвращать:

□ 0, если текущий объект и параметр равны;

□ отрицательное число, если текущий объект меньше параметра;

□ положительное число, если текущий объект больше параметра.
Реализуем интерфейс IComparable в знакомом нам классе Monster. В качестве кри­
терия сравнения объектов выберем поле health. В листинге 9.1 приведена про­
грамма, сортирующая массив монстров по возрастанию величины, характери­
зующей их здоровье (элементы класса, не используемые в данной программе, не
приводятся).

Листинг 9.1. Пример реализации интерфейса IComparable

using System;

namespace ConsoleApplication1

{

class Monster: IComparable

{

public Monster(int health, int ammo, string name)

{

this.health = health;

this.ammo = ammo;

this.name = name;

}

virtual public void Passport()

{

Console.WriteLine("Monster {0} \t health - {1} ammo - {2}",

name, health, ammo);

}

public int CompareTo(object obj) // реализация интерфейса

{

Monster temp = (Monster)obj;

if (this.health > temp.health) return 1;

if (this.health < temp.health) return -1;

return 0;

}

string name;

int health, ammo;

}

class Class1

{

static void Main()

{

const int n = 3;

Monster[] stado = new Monster[n];

stado[0] = new Monster(50, 50, "Вася");

stado[l] = new Monster(80, 80, "Петя");

stado[2] = new Monster(40, 10, "Маша");

Array.Sort(stado); // сортировка стала возможной

foreach (Monster elem in stado) elem.Passport();

}

}

}

Результат работы программы:

Monster Маша health = 40 ammo = 10

Monster Вася health = 50 ammo = 50

Monster Петя health = 80 ammo = 80

Если несколько объектов имеют одинаковое значение критерия сортировки, их относительный порядок следования после сортировки не изменится. Во многих алгоритмах требуется выполнять сортировку объектов по различным критериям. В С# для этого используется интерфейс IComparer, который рассмот­рен в следующем разделе.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: