Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Перегрузка операций.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
196.1 Кб
Скачать

Лекция 04.05.15 г. Перегрузка операций (операторов).

Язык С# позволяет определить значение оператора относительно создаваемого класса. Этот процесс называется перегрузкой операторов. Перегружая оператор, вы расширяете его использование для класса. Результат действия оператора полностью находится в ваших руках, и может быть разным при переходе от класса к классу. Например, класс, который определяет связный список, может использовать оператор " + " для добавления объектов в список. Класс, который реализует стек, может использовать оператор " + " для занесения объекта в стек. А какой-то другой класс может использовать этот оператор иным способом.

При перегрузке оператора ни одно из его исходных значений не теряется. Перегрузку оператора можно расценивать как введение новой операции для класса. Следовательно, перегрузка оператора " + " , например, для обработки связного списка (в качестве оператора сложения) не изменяет его значение применительно к целым числам.

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

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

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

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

// Общий формат перегрузки для унарного оператора,

public static тип_возврата operator ор{

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

{

// операции

}

// Общий формат перегрузки для бинарного оператора,

public static тип_возврата operator op{

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

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

{

// операции

}

Здесь элемент ор — это оператор (например " + " или " / "), который перегружается. Элемент тип_возврата — это тип значения, возвращаемого при выполнении заданной операции. Несмотря на то что можно выбрать любой тип, тип возвращаемого значения чаще всего будет совпадать с типом класса, для которого этот оператор перегружается. Такая корреляция облегчает использование перегруженного оператора в выражениях. Для унарных операторов операнд передается в элементе операнд, а для бинарных — в элементах операнд1 и операнд2.

Для унарных операторов тип операнда должен совпадать с классом, для которого определен оператор. Что касается бинарных операторов, то тип хотя бы одного операнда должен совпадать с соответствующим классом. Таким образом, С#-операторы нельзя перегружать для классов, не созданных вами. Например, вы не можете перегрузить оператор "+" для типов int или string. И последнее: параметры операторов не должны использовать модификатор ref или out.