.NET 4.x IComparable, ArrayList.Sort - C#
Формулировка задачи:
При вызове Sort вылетает ошибка "Дополнительные сведения: Сбой при сравнении двух элементов массива.". Не могли бы вы объяснить, в чем дело? Интерфейс реализовал же.
namespace Geometry { abstract class Figure : IComparable<Figure> { public virtual float GetS() { return 0; } public int CompareTo(Figure other) { if (other == null) return 1; return GetS().CompareTo(other.GetS()); } }; class Rectangle : Figure { public Rectangle(float w = 0, float h = 0) { _w = w; _h = h; } public override float GetS() { return _w * _h; } public float W { get { return _w; } set { _w = value; } } public float H { get { return _h; } set { _h = value; } } private float _w, _h; }; class Square : Rectangle { public Square(float a = 0) : base(a, a) { } }; class Circle : Figure { public Circle(float r = 0) { _r = r; } public override float GetS() { return (float)(Math.PI * _r * _r); } public float R { get { return _r; } set { _r = value; } } private float _r; }; }
static void Main(string[] args) { Geometry.Figure rect = new Geometry.Rectangle(20, 30), sqr = new Geometry.Square(5), cir = new Geometry.Circle(10); ArrayList arr = new ArrayList(); arr.Add(rect); arr.Add(sqr); arr.Add(cir); arr.Sort(); // тут ошибка Console.ReadLine(); }
Решение задачи: «.NET 4.x IComparable, ArrayList.Sort»
textual
Листинг программы
abstract class Figure : IComparable<Figure>, IComparable { public virtual float GetS() { return 0; } public int CompareTo(Figure other) { if (other == null) return 1; return GetS().CompareTo(other.GetS()); } public int CompareTo(object other) { return CompareTo(other as Figure); } };
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д