Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Стандартный интерфейс 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 является корневым классом для всех остальных в С#. Поэтому он может ссылаться на объект любого типа. Но чтобы потом получить доступ к членам объекта произвольного класса, нужно выполнить приведение типов.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.