Арифметические операторы
В class или struct
можно объявить public static перегрузки
operator + и operator -. Оба операнда
имеют тип вашего класса или структуры, результат
тоже задаёте вы. Так моделируют, например, сумму
и разность векторов или смещение координат.
Синтаксис
public static Тип operator +(Тип left, Тип right)
public static Тип operator -(Тип left, Тип right)
Пример
Давайте сложим два объекта через operator +:
using System;
class Pair
{
public int Left;
public int Right;
public static Pair operator +(Pair left, Pair right)
{
return new Pair
{
Left = left.Left + right.Left,
Right = left.Right + right.Right
};
}
public static Pair operator -(Pair left, Pair right)
{
return new Pair
{
Left = left.Left - right.Left,
Right = left.Right - right.Right
};
}
}
class Program
{
static void Main()
{
var first = new Pair { Left = 1, Right = 2 };
var second = new Pair { Left = 3, Right = 4 };
var res = first + second;
Console.WriteLine(res.Left);
}
}
Результат выполнения кода:
4
Пример
Давайте вычтем один объект из другого через operator -:
using System;
class Pair
{
public int Left;
public int Right;
public static Pair operator +(Pair left, Pair right)
{
return new Pair
{
Left = left.Left + right.Left,
Right = left.Right + right.Right
};
}
public static Pair operator -(Pair left, Pair right)
{
return new Pair
{
Left = left.Left - right.Left,
Right = left.Right - right.Right
};
}
}
class Program
{
static void Main()
{
var first = new Pair { Left = 5, Right = 4 };
var second = new Pair { Left = 1, Right = 1 };
var res = first - second;
Console.WriteLine(res.Right);
}
}
Результат выполнения кода:
3
Пример
Давайте перегрузим арифметику в структуре:
using System;
struct Offset
{
public int Value;
public static Offset operator +(Offset left, Offset right)
{
return new Offset { Value = left.Value + right.Value };
}
public static Offset operator -(Offset left, Offset right)
{
return new Offset { Value = left.Value - right.Value };
}
}
class Program
{
static void Main()
{
var res = new Offset { Value = 5 } + new Offset { Value = 3 };
Console.WriteLine(res.Value);
}
}
Результат выполнения кода:
8