Перегрузка operator
Метод с именем operator и символом оператора
перегружает встроенную операцию для вашего
класса или структуры. Метод обязан быть
public
и static. Часто перегружают +,
-, сравнения или неявное преобразование.
Здесь покажем рабочий бинарный +.
Синтаксис
public static тип operator +(тип left, тип right)
{
// вычисление и return
}
Пример
Давайте сложим два значения пользовательского
типа через +:
using System;
struct Pair
{
public int Left;
public int Right;
public static Pair operator +(Pair a, Pair b)
{
return new Pair
{
Left = a.Left + b.Left,
Right = a.Right + b.Right
};
}
}
class Program
{
static void Main()
{
var a = new Pair { Left = 1, Right = 2 };
var b = new Pair { Left = 3, Right = 4 };
var res = a + b;
Console.WriteLine($"{res.Left} {res.Right}");
}
}
Результат выполнения кода:
4 6
Пример
Давайте перегрузим + для строкового
поля:
using System;
class Tag
{
public string Text = "";
public static Tag operator +(Tag a, Tag b)
{
return new Tag { Text = a.Text + b.Text };
}
}
class Program
{
static void Main()
{
var a = new Tag { Text = "abc" };
var b = new Tag { Text = "de" };
Console.WriteLine((a + b).Text);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте сложим числа в обёртке через +:
using System;
struct Box
{
public int Value;
public static Box operator +(Box a, Box b)
{
return new Box { Value = a.Value + b.Value };
}
}
class Program
{
static void Main()
{
var res = new Box { Value = 2 } + new Box { Value = 3 };
Console.WriteLine(res.Value);
}
}
Результат выполнения кода:
5