На этом шаге мы приведем простейший пример перегрузки арифметических операторов.
Как иллюстрацию к перегрузке операторов мы рассмотрим небольшой и очень простой пример, в котором выполняется перегрузка оператора сложения для объектов пользовательского класса.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace pr106_1 { class Program { // Класс с перегрузкой оператора сложения: class MyClass { // Целочисленное поле: public int number; // Конструктор с целочисленным аргументом: public MyClass(int n) { // Присваивание значения полю: number = n; } // Операторный метод для перегрузки оператора сложения: public static int operator+(MyClass a, MyClass b) { // Локальная целочисленная переменная: int m = a.number + b.number; // Результат метода: return m; } } // Класс с главным методом: static void Main() { // Создание объектов класса MyClass: MyClass A = new MyClass(100); MyClass B = new MyClass(200); // Целочисленная переменная: int num; // Вычисление суммы объектов: num = A + B; // Отображение результата вычисления суммы объектов: Console.WriteLine("A + B = " + num); // Задержка: Console.ReadLine(); } } }
Результат выполнения программы будет таким:

Рис.1. Результат выполнения программы
Проанализируем программный код примера. В первую очередь нас будет интересовать класс MyClass, поскольку в нем есть операторный метод, с помощью которого выполняется перегрузка оператора сложения для объектов класса.
У класса есть целочисленное поле number, а также конструктор с одним аргументом (который определяет значение поля). Но нас интересует программный код с описанием операторного метода operator*():
// Операторный метод для перегрузки оператора сложения:
public static int operator+(MyClass a, MyClass b) {
// Локальная целочисленная переменная:
int m = a.number + b.number;
// Результат метода:
return m;
}
О чем свидетельствует этот программный код? Атрибуты public и static являются обязательными. Название метода operator+ означает, что метод соответствует оператору "плюс" +. Аргументов у метода два, то есть речь идет о бинарной операции. Оба аргумента описаны как такие, что относятся к классу MyClass. Следовательно, операторный метод будет вызываться для вычисления значения выражений вида А + В, в котором оба операнда А и В являются объектами класса MyClass. Идентификатором типа результата для операторного метода указано ключевое слово int. Поэтому результатом выражения вида А + В будет целое число. Чтобы понять, какое именно, необходимо проанализировать команды в теле метода. Там их всего две. Сначала командой
int m = a.number + b.number;
num = A + B;
Мы могли переопределить оператор сложения и по-другому, как в плане операндов (аргументов метода), так и в плане результата метода.
Способ, которым мы определили операторный метод в рассмотренном выше примере, подразумевает, что складываются два объекта класса MyClass. Но мы при этом не сможем вычислить, например, сумму объекта и числа или сумму числа и
объекта. Чтобы такие операции стали "законными", необходимо описать соответствующие версии операторного метода.
На следующем шаге мы продолжим изучение этого вопроса.