Во всех классах реализовать интерфейс 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();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы