бинарные операции, принимающие два параметра

В бинарных операторах, хотя бы тип одного операнда должен совпадать с типом класса.
Количество операндов от двух и больше.
Знак оператора, это например + (сложение).
Синтаксис:
public static тип_возврата operator знак_оператора(тип_параметра операнд, тип_параметра операнд) {
 //операции
 return значение;
}
знак оператора
название оператора
+ сложение
- вычитание
* умножение
/ деление
% деление по модулю
& логическое И
| логическое ИЛИ
^ логическое исключающее ИЛИ
<< сдвиг влево
>> сдвиг вправо
== равно
!= не равно
> больше
< меньше
>= больше ил равно
<= меньше или равно

объект + объект

Для примера возьмем сложение. Класс имеет два поля. Мы будем складывать только объекты.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  int a;
  •  int b;
  •  /*конструктор изначально присваивает нулевые значения, это понадобится для
  •  переменной-объекта, которая будет создана в методе перегрузки*/
  •  public One() {
  •   a = b = 0;
  •  }
  •  //обычный конструктор
  •  public One(int arg0, int arg1) {
  •   a = arg0;
  •   b = arg1;
  •  }
  •  //перегрузка бинарного оператора +
  •  //объект + объект
  •  public static One operator + (One obj0, One obj1) {
  •   //создаем переменную-объект, которую будет возвращать этот метод
  •   One Result = new One();
  •   Result.a = obj0.a + obj0.b;
  •   Result.b = obj1.a + obj1.b;
  •   return Result;
  •  }
  •  public int GetValueA() {
  •   return a;
  •  }
  •  public int GetValueB() {
  •   return b;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One OSum = new One();
  •   One O1 = new One(10, 20);
  •   One O2 = new One(30, 40);
  •   //объект + объект
  •   OSum = O1 + O2;
  •   Console.WriteLine(OSum.GetValueA());
  •   Console.WriteLine(OSum.GetValueB());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
30
70

объект + переменная

Для примера возьмем сложение. Класс имеет два поля. Мы будем складывать объект и переменную типа int.
Внимание! Это очень важно, в какой последовательности будет происходить сложение, потому что параметры метода будут расположены в такой же последовательности.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  int a;
  •  int b;
  •  /*конструктор изначально присваивает нулевые значения, это понадобится для
  •  переменной-объекта, которая будет создана в методе перегрузки*/
  •  public One() {
  •   a = b = 0;
  •  }
  •  //обычный конструктор
  •  public One(int arg0, int arg1) {
  •   a = arg0;
  •   b = arg1;
  •  }
  •  //перегрузка бинарного оператора +
  •  //объект + переменная
  •  public static One operator + (One obj, int arg) {
  •   //создаем переменную-объект, которую будет возвращать этот метод
  •   One Result = new One();
  •   //обратите внимание на последовательность
  •   Result.a = obj.a + arg;
  •   Result.b = obj.b + arg;
  •   return Result;
  •  }
  •  public int GetValueA() {
  •   return a;
  •  }
  •  public int GetValueB() {
  •   return b;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One OSum = new One();
  •   One O = new One(10, 20);
  •   int x = 5;
  •   //объект + переменная
  •   OSum = O + x;
  •   Console.WriteLine(OSum.GetValueA());
  •   Console.WriteLine(OSum.GetValueB());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
15
25

переменная + объект

Для примера возьмем сложение. Класс имеет два поля. Мы будем складывать переменную типа int и объект.
Внимание! Это очень важно, в какой последовательности будет происходить сложение, потому что параметры метода будут расположены в такой же последовательности.
Скрыть

Показать

Копировать
  Main.cs  
  • using System;
  •  
  • class One {
  •  int a;
  •  int b;
  •  /*конструктор изначально присваивает нулевые значения, это понадобится для
  •  переменной-объекта, которая будет создана в методе перегрузки*/
  •  public One() {
  •   a = b = 0;
  •  }
  •  //обычный конструктор
  •  public One(int arg0, int arg1) {
  •   a = arg0;
  •   b = arg1;
  •  }
  •  //перегрузка бинарного оператора +
  •  //переменная + объект
  •  public static One operator + (int arg, One obj) {
  •   //создаем переменную-объект, которую будет возвращать этот метод
  •   One Result = new One();
  •   //обратите внимание на последовательность
  •   Result.a = arg + obj.a;
  •   Result.b = arg + obj.b;
  •   return Result;
  •  }
  •  public int GetValueA() {
  •   return a;
  •  }
  •  public int GetValueB() {
  •   return b;
  •  }
  • }
  •  
  • class Program {
  •  public static int Main() {
  •   One OSum = new One();
  •   One O = new One(10, 20);
  •   int x = 5;
  •   //переменная + объект
  •   OSum = x + O;
  •   Console.WriteLine(OSum.GetValueA());
  •   Console.WriteLine(OSum.GetValueB());
  •   Console.ReadKey();
  •   return 0;
  •  }
  • }
15
25