Перезавантаження операторів в c # - навіщо вона потрібна і з чим її їдять

При розробці додатків досить часто пишуться класи типу: class test
public int a;
public int b;
>

Чому класи, а не структури? - найчастіше в таких прототипах даний все-таки присутні якісь методи, але мова зараз не про них, тому в прикладі коду їх і немає.

Тепер перейдемо власне до задачі: скажімо хочу я оформити свій код красиво і написати щось на кшталт: class MainClass
public static void Main # 40; string # 91; # 93; args # 41;
test tA = new test # 40; 1, 2 # 41 ;;
test tB = new test # 40; 1, 1 # 41 ;;

test tC = tA + tB;
>> і отримати tC з параметром a = 2 і b = 3, вся сіль у тому, що JIT компілятор поняття не має, що робити з вашим класом. Для того, щоб вище наведений код працював, нам потрібно перезавантажити унарний оператор ітерації. Для цього додаємо в наш клас відповідну функцію і отримуємо такий вигляд класу: class test
public int a;
public int b;

public test # 40; int _a, int _b # 41;
a = _a;
b = _b;
>

public static test operator + # 40; test t1, test t2 # 41;
return new test # 40; t1.a + t1.a, t1.b + t2.b # 41 ;;
>

Після цього код, наведений у функції Main, виконається без проблем.

Отже, ще раз повний код: class test
public int a;
public int b;

public test # 40; int _a, int _b # 41;
a = _a;
b = _b;
>

public static test operator + # 40; test t1, test t2 # 41;
return new test # 40; t1.a + t1.a, t1.b + t2.b # 41 ;;
>

class MainClass
public static void Main # 40; string # 91; # 93; args # 41;


test tA = new test # 40; 1, 2 # 41 ;;
test tB = new test # 40; 1, 1 # 41 ;;

test tC = tA + tB;

Console.WriteLine # 40; ",", tC.a, tC.b # 41 ;; //

З повагою, Сургай Володимир.