Главное преимущество перегрузки операторов заключается в том, что она позволяет плавно интегрировать класс нового типа в среду программирования. Подобного ро^а расширяемость типов является важной составляющей эффективности такого объектно-ориентированного языка программирования, как С#. Как только для класса определяются операторы, появляется возможность оперировать объектами этого класса, используя обычный синтаксис выражений в С#. Перегрузка операторов является одной из самых сильных сторон языка С#.

Основы перегрузки операторов

Перегрузка операторов тесно связана с перегрузкой методов. Для перегрузки оператора служит ключевое словоoperator,определяющееоператорный метод, который, в свою очередь, определяет действие оператора относительно своего класса.

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

// Общая форма перегрузки унарного оператора.

public staticвозвращаемый_типoperator ор{тип_параметра операнд)

{

// операции

}

// Общая форма перегрузки бинарного оператора.

public staticвозвращаемый_типoperatorор(тип_параметра1 операнд1,

тип_параметра1 операнд2)

{

11операции

}

Здесь вместоорподставляется перегружаемый оператор, например + или /; авоз-вращаемый_типобозначает конкретный тип значения, возвращаемого указанной операцией. Это значение может быть любого типа, но зачастую оно указывается такого же типа, как и у класса, для которого перегружается оператор. Такая корреляция упрощает применение перегружаемых операторов в выражениях. Для унарных операторовоперандобозначает передаваемый операнд, а для бинарных операторов то же самое обозначаютоперанд1иоперанд2.Обратите внимание на то, что операторные методы должны иметь оба типа,publicиstatic.

Тип операнда унарных операторов должен быть таким же, как и у класса, для которого перегружается оператор. А в бинарных операторах хотя бы один из операндов должен быть такого же типа, как и у его класса. Следовательно, в C# не допускается перегрузка любых операторов для объектов, которые еще не были созданы. Например, назначение оператора + нельзя переопределить для элементов типаintилиstring.

И еще одно замечание: в параметрах оператора нельзя использовать модификаторrefилиout.

Перегрузка бинарных операторов

Перейти на страницу:

Похожие книги