![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Стандартный интерфейс 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 является корневым классом для всех остальных в С#. Поэтому он может ссылаться на объект любого типа. Но чтобы потом получить доступ к членам объекта произвольного класса, нужно выполнить приведение типов.
|