Как перегрузить операции отношения для реализации значимой семантики сравнения объектов - C#
Формулировка задачи:
Добрый вечер. Есть поставленная задача с наследованием:
Она в некотором роде не дописана (последние два задания), но суть не в этом.
К этому заданию есть дополнение. Меня интересует такой вопрос:
Что есть "параметризованные коллекции", интерфейс IComparable и как перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю, в рамках данной задачи.
Создать класс Point (точка). На его основе создать классы ColoredPoint и Line
(линия). На основе класса Line создать классы ColoredLine и PolyLine (многоугольник).
В классах описать следующие элементы:
• конструкторы с параметрами и конструкторы по умолчанию;
• свойства для установки и получения значений всех координат, а также для
изменения цвета и получения текущего цвета;
• для линий — методы изменения угла поворота линий относительно первой
точки;
• для многоугольника — метод масштабирования.
Выполните задание,используя для хранения экземпляров
разработанных классов стандартные параметризованные коллекции. Во всех классах реализовать интерфейс IComparable и перегрузить операции отношения для реализации значимой семантики сравнения объектов по какому-либо полю на ваше усмотрение.
class Point
{
public Point() //конструктор по умолчанию
{
}
public Point(int x, int y) //конструктор
{
this.X = x;
this.Y = y;
}
private int _X;
public int X
{
get //способ пролучения свойства
{
return this._X;
}
set //способ задания свойства
{
_X = value;
}
}
private int _Y;
public int Y
{
get
{
return this._Y;
}
set
{
_Y = value;
}
}
}
class ColoredPoint : Point
{
public ColoredPoint()
{ }
public ColoredPoint(int x, int y, int color)
: base(x, y)
{
this.Color = color;
}
private int _Color;
public int Color
{
get
{
return this._Color;
}
set
{
_Color = value;
}
}
}
class Line
{
public Line()
{ }
public Line(Point start, Point end)
{
this.Start = start;
this.End = end;
}
public Line (int x1, int y1, int x2, int y2)
: this(new Point(x1, y1), new Point(x2,y2))
{ }
private Point _Start;
public Point Start
{
get { return _Start; }
set { _Start = value; }
}
private Point _End;
public Point End
{
get { return _End; }
set { _End = value; }
}
}
class ColoredLine : Line
{
public ColoredLine(Point start, Point end, int color)
: base(start, end)
{
this.Color = color;
}
public ColoredLine(int x1, int y1, int x2, int y2, int color)
: this(new Point(x1, y1), new Point(x2,y2), color)
{ }
private int _Color;
public int Color
{
get
{
return this._Color;
}
set
{
_Color = value;
}
}
}
class Polygon
{
public Polygon()
{}
public Polygon(List<Line> frieng)
{
this.Frieng = frieng;
}
private List<Line> _Frieng;
public List<Line> Frieng
{
get { return _Frieng; }
set { _Frieng = value; }
}
}Решение задачи: «Как перегрузить операции отношения для реализации значимой семантики сравнения объектов»
textual
Листинг программы
int CompareTo(T other)