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