Во всех классах реализовать интерфейс IComparable и перегрузить метод CompareTo для сравнения объектов - C#
Формулировка задачи:
В программах требуется описать базовый класс (возможно, абстрактный), в котором задается интерфейс для производных классов. Во всех классах реализовать интерфейс IComparable и перегрузить метод CompareTo для сравнения объектов по каким-либо полям на усмотрение разработчика программы.
Функция Main должна содержать массив из элементов базового класса, заполненный ссылками на производные классы. В этой функции должно демонстрироваться использование всех разработанных элементов классов, а также сортировка массива объектов.
Вот программа написанная с помощью наследования, нужно переделать на делегаты и интерфейсы.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Наследование { //Создать класс Paiг (пара целых чисел). //Определить метод умножения на число и операцию сложения пар (a,b) + (c,d) = (а + b, с + d). //Определить класс- наследник Money с полями: рубли и копейки. //Переопределить операцию сложения и определить методы вычитания денежных сумм. class Program { class Pair { public int a, b; public Pair(int a, int b) { this.a = a; this.b = b; } public static Pair operator *(int b, Pair a) { return new Pair(a.a * b, a.b * b); } public static Pair operator +(Pair a, Pair b) { return new Pair(a.a + a.b, b.a + b.b); } public virtual string show() { return Convert.ToString(a) + "," + Convert.ToString(b); } } class Money : Pair { public Money(int a, int b) : base(a, b) { } public static Money operator +(Money a, Money b) { int r, k; r = a.a + b.a; if ((a.b + b.b) >= 100) { r++; k = a.b + b.b - 100; } else k = a.b + b.b; return new Money(r, k); } public static Money operator *(int b, Money a) { int r, k; r = b * a.a; if ((a.b * b) >= 100) { r = r + a.b / 100; k = a.b % 100; } else k = a.b * b; return new Money(r, k); } public static Money operator -(Money a, Money b) { int r, k; r = a.a - b.a; if ((a.b - b.b) < 0) { r--; k = a.b - b.b + 100; } else k = a.b - b.b; return new Money(r, k); } public override string show() { return Convert.ToString(a) + " руб " + Convert.ToString(b) + " коп"; } } static void Main(string[] args) { Pair p1 = new Pair(6, 4); Pair p2 = new Pair(8, 9); Money c1 = new Money(10, 5); Money c2 = new Money(7, 97); Console.WriteLine("Класс Pair"); Console.WriteLine("(" + p1.show() + ")" + " + " + "(" + p2.show() + ")" + " = " + "(" + (p1 + p2).show() + ")"); Console.WriteLine(p1.show() + " * " + "4" + " = " + (4 * p1).show()); Console.WriteLine("Класс Money"); Console.WriteLine(c1.show() + " + " + c2.show() + " = " + (c1 + c2).show()); Console.WriteLine(c1.show() + " * " + "8" + " = " + (8 * c1).show()); Console.WriteLine(c1.show() + " - " + c2.show() + " = " + (c1 - c2).show()); Console.ReadLine(); } } }
Решение задачи: «Во всех классах реализовать интерфейс IComparable и перегрузить метод CompareTo для сравнения объектов»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication11 { class Program { static void Main(string[] args) { //Создаем массив IFigure[] myFigures = new IFigure[5] { new Rectangle(82,23,"Rect1",Color.Red), new Triangle(28,40,"Tr1",Color.Green), new Circle(20.5,"Crcl1",Color.Black), new Rectangle(78,30,Color.White), new Circle(10.2,Color.Red) }; //Используем общий метод интерфейса foreach (IFigure itfIf in myFigures) { itfIf.Draw(); } Console.WriteLine(); //Выводим площадь каждой фигуры foreach (IFigure itfIf in myFigures) { Console.WriteLine("Square is {0}", itfIf.Square); } //Сортируем нашим сортировщиком по площади Array.Sort(myFigures, new MyCompare()); Console.WriteLine(); //Выводим снова площадь каждой фигуры foreach (IFigure itfIf in myFigures) { Console.WriteLine("Square is {0}", itfIf.Square); } Console.ReadLine(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д