Реализовать интерфейс геометрическая фигура - C#
Формулировка задачи:
Всем привет. Есть такая задача
Создать классы квадратов и окружностей, реализующие общий интерфейс «Геометрические фигуры»:
Интерфейс должен определять следующие элементы: свойство, возвращающее площадь фигуры, метод вывода информации, и наследовать интерфейс IComparable для сравнения фигур по типу.
Класс квадратов должен содержать следующие элементы: поле-сторону квадрата, конструктор, реализованные элементы интерфейса, метод вычисления периметра. Класс кругов должен содержать следующие элементы: поля - радиус, цвет фигуры, конструктор, реализованные элементы интерфейса.
Создать класс-контейнер для фигур, содержащий поле-массив фигур (ссылок интерфейсного типа), конструктор, методы для сортировки по площади и по типу фигуры, а также реализующий интерфейс IEnumerable.
Дополнительно создать класс , реализующий интерфейс IComparer. Использовать объект класса для сортировки фигур по площади.
В классе Program создать объект класса-контейнера с информацией о двух кругах и двух квадратах. Вывести информацию о фигурах, используя для просмотра содержимого контейнера оператор foreach. Сортировать информацию по типу. Сортировать информацию по площадям фигур.
Написал почти весь код, только осталась проблема с сортировкой по типу. Не понимаю как реализовать метод интерфейса IComparable.
Фал с кодом прикреплён. помогите если не сложно. Буду благодарен
Решение задачи: «Реализовать интерфейс геометрическая фигура»
textual
Листинг программы
interface IGeometricFigure : IComparable
{
double Area{get;}
void Show();
}
class ArrayOfFigures: IEnumerable
{
IGeometricFigure[] geometricFigure;
public ArrayOfFigures(params IGeometricFigure[] gf)
{
geometricFigure = gf;
}
IEnumerator IEnumerable.GetEnumerator()
{
return geometricFigure.GetEnumerator();
}
public void SortArea()
{
Array.Sort(geometricFigure, new AreaComparer());
}
public void SortType()
{
Array.Sort(geometricFigure, new TypeComparer());
}
}
class Circle:IGeometricFigure
{
double radius;
Color colour;
static TypeComparer TypeComparer = new TypeComparer();
public Circle(double r, Color c)
{
radius = r;
colour = c;
}
public double Area
{
get { return Math.PI*radius*radius; }
}
public override string ToString()
{
return "Круг с радиусом " + radius + "\r\nПлощадь круга равна " + Area + "\r\nЦвет круга - " + colour;
}
public void Show()
{
Console.WriteLine(ToString());
}
public int CompareTo(object obj)
{
return TypeComparer.Compare(this, obj);
}
}
class Square:IGeometricFigure
{
double side;
static TypeComparer TypeComparer = new TypeComparer();
public Square(int side)
{
this.side = side;
}
public double Perimeter()
{
return 4 * side;
}
public double Area
{
get { return side * side; }
}
public override string ToString()
{
return "Квадрат со стороной " + side + "\r\nПлощадь квадрата равна " + Area + "\r\nПериметр квадрата равен " + Perimeter();
}
public void Show()
{
Console.WriteLine(ToString());
}
public int CompareTo(object obj)
{
return TypeComparer.Compare(this, obj);
}
}
class AreaComparer : IComparer
{
public int Compare(object x, object y)
{
IGeometricFigure a1 = x as IGeometricFigure;
IGeometricFigure a2 = y as IGeometricFigure;
return a1.Area.CompareTo(a2.Area);
}
}
class TypeComparer : IComparer
{
public int Compare(object x, object y)
{
return x.GetType().Name.CompareTo(y.GetType().Name);
}
}