Оператор + (сложение) при применении к двум объектам типа int возвращает их сумму.
int x = 9; int y = 10; int z = x + y; // 19
Как можно переопределить оператор + для типа int, чтобы этот оператор возвращал не сумму, а произведение двух объектов int?
Никак. Мы не можем переопределить или перегрузить операторы для типов, которые есть в .NET по умолчанию.
Есть класс Counter:
class Counter { public int Number { get; set; } // определение оператора сложения }
В этом классе определен оператор сложения, который позволяет складывать объект Counter с объектом типа int следующим образом:
Counter counter = new Counter { Number = 45 }; int x = counter + 6; Console.WriteLine(x); // 51
Какой именно оператор сложения определен в классе Counter? Варианты ответов (правильных вариантов может быть несколько)
public int operator + (Counter counter, int val) { return counter.Number + val; }
public static int operator + (Counter counter, int val) { return counter.Number + val; }
public static int operator + (int val, Counter counter) { return counter.Number + val; }
public static Counter operator + (Counter counter, int val) { return new Counter {Number = counter.Number + val}; }
public static Counter operator + (int val, Counter counter) { return new Counter {Number = counter.Number + val}; }
Правильный ответ:
public static int operator + (Counter counter, int val) { return counter.Number + val; }
Почему не компилируется следующая программа?
class Counter { public int Number { get; set; } public static int operator + (int val, Counter counter) { return counter.Number + val; } } class Program { static void Main(string[] args) { Counter counter = new Counter { Number = 45 }; int x = counter + 6; Console.WriteLine(x); // 51 Console.ReadKey(); } }
Первый параметр оператора сложения в классе Counter представляет тип int, а второй - тип Counter. Поэтому при применении операции сложения левый операнд должен представлять тип int, а правый - объект Counter:
int x = 6 + counter; // вместо // int x = counter + 6;