Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Перегрузка операций сравнения

Перегрузка операций сравнения

Из материала главы 7 вы узнали о том, как реализовать интерфейс IComparable, чтобы иметь возможность сравнения подобных объектов. В дополнение к этому для того же класса вы можете использовать перегрузку операций сравнения (‹, ›, ‹= и ›=). Подобно операциям проверки на тождественность, в C# требуется, чтобы при перегрузке ‹ выполнялась и перегрузка ›. Это же касается и операций ‹= и ›=. Если тип Point использует перегрузку операций сравнения, пользователь объекта получает возможность сравнивать объекты Point так, как показано ниже.

// Использование перегруженных операций ‹ и ›.
static void Main(string[] args) {
 …
 Console.WriteLine("ptOne ‹ ptTwo: {0}", ptOne ‹ ptTwo);
 Console.WriteLine("ptOne › ptTwo: {0}", ptOne › ptTwo);
}

В предположении о том, что интерфейс IComparable реализован, перегрузка операций сравнения оказывается тривиальной. Вот как может выглядеть обновленное определение класса.

// Можно сравнивать объекты Point с помощью операций сравнения.
public struct Point: IComparable {
 …
 public int CompareTo(object obj) {
  if (obj is Point) {
   Point p = (Point)obj;
   if (this.x › p.x && this.y › p.y) return 1;
   if (this.x ‹ p.x && this.y ‹ p.y) return -1;
   else return 0;
  } else throw new ArgumentException();
 }
 public static bool operator‹(Point p1, Point p2) { return(p1.CompareTo(р2) ‹ 0); }
 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); }
 public statiс bool operator›=(Point p1, Point p2) { return(p1.CompareTo(p2) ›= 0); }
}

Оглавление книги


Генерация: 1.160. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз