Операторы отношения, например == и <, могут также перегружаться, причем очень просто. Как правило, перегруженный оператор отношения возвращает логическое значение true и false.
//перегрузить операторы < and >.
using System;
//класс для храниненя трехмерных координат.
class ThreeD
{
int x, y, z;
public ThreeD() { x = y = z = 0; }
public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }
//прегрузить оператор <.
public static bool operator <(ThreeD op1, ThreeD op2)
{
if (Math.Sqrt(op1.x * op1.x + op1.y * op1.y + op1.z * op1.z) <
Math.Sqrt(op2.x * op2.x + op2.y * op2.y + op2.z * op2.z))
return true;
else return false;
}
//перегрузить оператор >.
public static bool operator >(ThreeD op1, ThreeD op2)
{
if (Math.Sqrt(op1.x * op1.x + op1.y * op1.y + op1.z * op1.z) >
Math.Sqrt(op2.x * op2.x + op2.y * op2.y + op2.z * op2.z))
return true;
else return false;
}
//вывести координаты X, Y, Z.
public void Show()
{
Console.WriteLine(x + ", " + y + ", " + z);
}
}
class ThreeDDemo
{
static void Main()
{
ThreeD a = new ThreeD(5, 6, 7);
ThreeD b = new ThreeD(10, 10, 10);
ThreeD c = new ThreeD(1, 2, 3);
ThreeD d = new ThreeD(6, 7, 5);
Console.Write("Координаты точки a: ");
a.Show();
Console.Write("Координаты точки b: ");
b.Show();
Console.Write("Координаты точки c: ");
c.Show();
Console.Write("Координаты точки d: ");
|
|
d.Show();
Console.WriteLine();
if (a > c) Console.WriteLine("a > c true");
if (a < c) Console.WriteLine("a < c thre");
if (a > b) Console.WriteLine("a > b true");
if (a < b) Console.WriteLine("a < b true");
if (a > d) Console.WriteLine("a > d true");
else if (a < d) Console.WriteLine("a < d true");
else Console.WriteLine("Точки a и d находятся на одном расстоянии от начала отсчета");
}
}
На перегрузку операторов отношения накладывается следующее важное ограничение: они должны перегружаться попарно. Так, если перегружается оператор <, то следует перегрузить и оператор >, и наоборот. Ниже приведены составленные в пары перегружаемые операторы отношения.
==!=
< >
<= >=
И еще одно замечание: если перегружаются операторы == и!=, то для этого обычно требуется также переопределить методы Object.Equals() и Object.GetHashCode(). Эти методы и способы их переопределения подробнее рассматриваются в главе 11.