Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Основы перегрузки операторов C# Полное руководство Герберт Шилдт

Основы перегрузки операторов C# Полное руководство Герберт Шилдт

Перегрузка операторов тесно связана с перегрузкой методов. Для перегрузки оператора служит ключевое слово operator, определяющее операторный метод, который, в свою очередь, определяет действие оператора относительно своего класса.
Существуют две формы операторных методов (operator): одна - для унарных операторов, другая - для бинарных. Ниже приведена общая форма для каждой разновидности этих методов.

// Общая форма перегрузки унарного оператора.
public static возвращаемый_тип operator ор(
                                             тип_параметра операнд)
{
   // операции
}
// Общая форма перегрузки бинарного оператора.
public static возвращаемый_тип operator ор(
                                             тип_параметра1 операнд1,
                         тип_параметра2 операнд2)
{
   // операции
}


Здесь вместо ор подставляется перегружаемый оператор, например + или /; а воз-вращаемый_тип обозначает конкретный тип значения, возвращаемого указанной операцией. Это значение может быть любого типа, но зачастую оно указывается такого же типа, как и у класса, для которого перегружается оператор. Такая корреляция упрощает применение перегружаемых операторов в выражениях. Для унарных операторов операнд обозначает передаваемый операнд, а для бинарных операторов то же самое обозначают операнд1 и операнд2. Обратите внимание на то, что операторные методы должны иметь оба типа, public и static.
Тип операнда унарных операторов должен быть таким же, как и у класса, для которого перегружается оператор. А в бинарных операторах хотя бы один из операндов должен быть такого же типа, как и у его класса. Следовательно, в C# не допускается перегрузка любых операторов для объектов, которые еще не были созданы. Например, назначение оператора + нельзя переопределить для элементов типа int или string.
И еще одно замечание: в параметрах оператора нельзя использовать модификатор ref или out.