Стандартный интерфейс IComparable

В библиотеке классов .Net определено множество стандартных интерфейсов, задающих желаемую функциональность объектов. Например, интерфейс IComparable задает метод сравнения объектов по принципу больше и меньше, что позволяет переопределить соответствующие операции в рамках класса, наследующего интерфейс IComparable. Реализация интерфейсов IEnumerable и IEnumerator дает возможность просматривать содержимое объекта с помощью оператора foreach.

Можно создавать собственные классы, реализующие стандартные интерфейсы, что позволит использовать объекты этих классов стандартными способами.

Более подробно рассмотрим стандартный интерфейс IComparable.

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

interface IComparable

{

int CompareTo(object obj);

}

Реализация данного метода должна возвращать:

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

<0 – если текущий объект меньше параметра;

>0 – положительное число, если текущий объект больше параметра.

Пример:

Рассмотрим реализацию классом DemoPoint стандартного интерфейса IComparable.

// класс DemoPoint реализует стандартный интерфейс IComparable

class DemoPoint:IComparable

{

protected int x;

protected int y;

public DemoPoint ( int x, int y) { this.x=x; this.y=y; }

public void Show()

{ Console.WriteLine("точка на плоскости: ({0}, {1})",x, y); }

public double Dlina() { return Math.Sqrt(x*x+y*y); }

//реализация метода CompareTo

public int CompareTo (object obj)

{

DemoPoint b=(DemoPoint) obj; //преобразуем к типу DemoPoint

//определяем критерии сравнения текущего объекта с параметром в зависимости от удаленности точки от начала координат

if (this.Dlina()==b.Dlina()) return 0;

else if (this.Dlina()>b.Dlina()) return 1;

else return -1;

}

}

class Program

{

static void Main()

{

//создаем массив ссылок

DemoPoint []a =new DemoPoint[4];

a[0]=new DemoPoint(5,-1);

a[1]=new DemoPoint(-3, 3);

a[2]=new DemoPoint(3,4);

a[3]= new DemoPoint(0,1);

//сортируем массив точек, при этом в качестве критерия сортировки будет использоваться собственная реализация метода CompareTo

Array.Sort(a);

Console.WriteLine();

foreach (DemoPoint x in a)

{

x.Show();

Console.WriteLine("Dlina={0:f2} ",x.Dlina());

}

}

}

Обратите внимание на то, что во время реализации метода CompareTo в качестве параметра передавалась ссылка на объект типа object. Напомним, что класс object является корневым классом для всех остальных в С#. Поэтому он может ссылаться на объект любого типа. Но чтобы потом получить доступ к членам объекта произвольного класса, нужно выполнить приведение типов.

 








Дата добавления: 2015-10-26; просмотров: 980;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.