Реализовать интерфейс IComparable и перегрузить операции отношения для реализации семантики - C#
Формулировка задачи:
Нужно в программу добавить реализацию интерфейса IComparable и перегрузить операции отношения для реализации семантики.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Lab_09
{
class Point
{
public double x=2, y=2;
public Point()
{
this.x = 3;
this.y = 3;
}
public Point (double x, double y)
{
this.x = x;
this.y = y;
}
public double GetX() //Метод получения координаты x
{
return x;
}
public double GetY() //Метод получения координаты y
{
return y;
}
virtual public void Data()
{
Console.WriteLine("Point: x={0}, y={1};", x, y);
}
virtual public void ChangeCo()
{
x = 15;
y = 20;
}
}
class ColoredPoint : Point
{
private string colour;
public ColoredPoint()
{
this.colour = "white";
}
public ColoredPoint(double x, double y, string colour) : base(x, y)
{
this.colour = "white";
}
override public void Data()
{
Console.WriteLine("ColoredPoint: x={0}, y={1}, colour={2};", x, y, colour);
}
override public void ChangeCo()
{
x = 22;
y = 12;
colour = "gray";
}
}
class Line: Point
{
public double x1, y1;
public Line() //Конструктор по умолчанию
{
this.x1 = 1;
this.y1 = 1;
}
public Line(double x, double y, double x1, double y1) : base(x, y)
{
this.x1 = x1;
this.y1 = y1;
}
override public void Data()
{
Console.WriteLine("Line: x={0}, y={1}, x1={2}, y1={3};", x, y, x1, y1);
}
override public void ChangeCo()
{
x = 2;
y = 4;
x1 = 4;
y1 = 2;
}
}
class ColoredLine : Line
{
public string colour;
public ColoredLine() /
{
this.colour = "white";
this.x1 = 1;
this.y1 = 1;
}
public ColoredLine(double x, double y, double x1, double y1, string colour) : base(x, y, x1, y1)
{
this.colour = "white";
this.x1 = 1;
this.y1 = 1;
}
override public void Data()
{
Console.WriteLine("ColoredLine: x={0}, y={1}, x1={2}, y1={3}, colour={4};", x, y, x1, y1, colour);
}
override public void ChangeCo()
{
x = 2;
y = 1;
x1 = 2;
y1 = 1;
colour = "blue";
}
}
class PolyLine : Line
{
public double x2, y2, x3, y3, x4, y4;
public PolyLine()
{
this.x1 = 1;
this.y1 = 1;
this.x2 = 2;
this.y2 = 3;
this.x3 = 4;
this.y3 = 5.5;
this.x4 = 2.4;
this.y4 = 1.5;
}
public PolyLine(double x, double y, double x1, double y1, double x2, double y2) : base(x, y, x1, y1)
{
this.x1 = 1;
this.y1 = 1;
this.x2 = 2;
this.y2 = 2;
this.x3 = 4;
this.y3 = 5.5;
this.x4 = 2.4;
this.y4 = 1.5;
}
override public void Data()
{
Console.Write("PolyLine: x{0}={4}, y{0}={5}, x{1}={6}, y{1}={7}, x{2}={8}, y{2}={9}, x{3}={10}, y{3}={11};", 1, 2, 3, 4, x1, y1, x2, y2, x3, y3, x4, y4);
}
override public void ChangeCo()
{
x4 = x4/2;
y4 = y4/2;
x1 = x1/2;
y1 = y1/2;
x2 = x2/2;
y2 = y2/2;
x3 = x3/2;
y3 = y3/2;
}
}
class Program
{
static void Main(string[] args)
{
const int n = 5;
Point[] mas = new Point[n];
mas[0] = new Point(1, 5);
mas[1] = new ColoredPoint(5, 10, "green");
mas[2] = new Line(2, 2, 4, 4);
mas[3] = new ColoredLine(2, 2, 4, 4, "red");
mas[4] = new PolyLine(1, 1, 2, 2, 1.5, 1.5);
foreach (Point elem in mas) elem.Data();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Вносятся изменения:\nМасштабирование четырехугольника 4:1\nИзменение координат точек и линий\nИзменение цветов линий и точек\nПоворот линии на 90 градусов");
foreach (Point elem in mas) elem.ChangeCo();
Console.WriteLine();
foreach (Point elem in mas) elem.Data();
Console.WriteLine();
Console.Write("Press ENTER to exit...");
Console.Read();
}
}
}Решение задачи: «Реализовать интерфейс IComparable и перегрузить операции отношения для реализации семантики»
textual
Листинг программы
class Point : IComparable<Point>
{
....
public int CompareTo(Point other)
{
var d1 = x * x + y * y;
var d2 = other.x * other.x + other.y * other.y;
return d1.CompareTo(d2);
}
public static bool operator >(Point p1, Point p2)
{
return p1.CompareTo(p2) > 0;
}
public static bool operator <(Point p1, Point p2)
{
return p1.CompareTo(p2) < 0;
}
}