В бинарных операторах, хотя бы тип одного операнда должен совпадать с типом класса.
Количество операндов от двух и больше.
Знак оператора, это например + (сложение).
Количество операндов от двух и больше.
Знак оператора, это например + (сложение).
Синтаксис:
public static тип_возврата operator знак_оператора(тип_параметра операнд, тип_параметра операнд) {
//операции
return значение;
}
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;
-
}
}
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
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;
-
}
}
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
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;
-
}
}
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
25