Перегрузка операторов

Перегруженный оператор — это метод со специальными именами, где за ключевым словом operator следует символ переопределяемого оператора.

class Box {
  public int Height { get; set; }
  publci int Width { get; set; }
  public Box(int h, int w) {
    Height = h;
    Width = w;
  }

public static Box operator+ (Box a, Box b) {
  int h = a.Height + b.Height;
  int w = a.Width + b.Width;
  Box res = new Box(h, w);
  return res;
  }
}
static void Main(string[] args) {
  Box b1 = new Box(14, 3);
  Box b2 = new Box(5, 7);
  Box b3 = b1 + b2;
  Console.WriteLine(b3.Height); // 19
  Console.WriteLine(b3.Width); // 10
}

Благодаря этому перегруженному оператору мы суммируем сразу 2 параметра. Перегруженный оператор должен быть static.

Перегружены могут быть все арифметические операторы и операторы сравнения. При перегрузке оператора >, оператор < должен быть тоже перегружен (тип будет bool: public static bool operator>).

Методы: перегрузка

Если для разных типов данных или при разном количестве передаваемых аргументов нужно запускать разные методы, то имеется возможность перегрузки методов.

static void Print(int a) {
  Console.WriteLine("Value: " + a);
  }
static void Print(double a) {
  Console.WriteLine("Value: " + a);
  }
static void Print(string label, int a) {
  Console.WriteLine(label + a);
  }

static void Main(string[] args) {
  Print(11);
  Print(4.13);
  Print("Ответ: ", 14);
  }

Перегрузка работает только при разных типах аргументов. Следующий код выведет ошибку:

int Print(int a) {}
float Print(int a) {}
double Print(int a) {}