Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка для КР по ООП.doc
Скачиваний:
8
Добавлен:
18.04.2019
Размер:
2.47 Mб
Скачать

Перегрузка операций

Основная конструкция C# - объявление класса или структуры.

Классы и структуры есть типы. Тип характеризуется неизменяемым набором свойств и методов. Для встроенных типов определены множества преобразований (операций), которые кодируются с использованием предопределённого множества операций. Язык позволяет строить сложные выражения с использованием этих операций, причём результат выполнения (определения результирующего значения) зависит от типа составляющих сложное выражение элементарных выражений. Например, сложение целочисленных значений определяется и выполняется иначе, нежели сложение чисел с плавающей точкой.

Программист может строить сложные выражения с использованием символов арифметических, логических, операций сравнения и прочих операций на основе элементарных выражений встроенных типов.

Вновь объявляемые классы служат основой для создания объектов. Эти объекты в принципе ничем не отличаются от других объектов, в том числе от объектов-представителей элементарных аривметических типов. В частности, ссылки на такие объекты могут использоваться как элементарные выражения в выражениях более сложной структуры.

Для построения сложных выражений на основе элементарных выражений производных (объявляемых программиистом) типов C# предоставляет те же возможности, что и для выражений всех прочих типов. При этом главная проблема заключается в том, что алгоритм вычисления значения представленного операндами вновь объявляемого типа, в сочетании с символом операции ‘+’ (например) для операндов этого типа неизвестен. Семантика операции должна быть специальным образом определена программистом при определении класса.

Перегрузка операций в C# как раз и является способом объявления семантики операций, обозначаемых привычным набором символов операций. Перегрузка операций строится на основе общедоступных (public) статических (вызываемых от имени класса) функций-членов с использованием ключевого слова operator.

Не все операции множества могут быть переопределены подобным образом. Не все операции могутбыть перегружены. Некоторые операции могут перегружаться с ограничениями.

В таблице приводится соответствующая информация различных категорий символов операций:

Операция

Перегружаемость

+, -, !, ~, ++, --, true, false

Унарные символы операций, допускающие перегрузку.

+, -, *, /, %, &, |, ^, <<, >>

Бинарные символы операций, допускающие перегрузку.

==, !=, <, >, <=, >=

Операции сравнения перегружаются.

&&, ||

Условные логические операции моделируются с использованием ранее переопределённых операций & и |.

[]

Операции доступа к элементам массивов моделируются за счёт индексаторов.

()

Операции преобразования реализуются с ипользованием ключевых слов implicit и explicit.

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

Операции не перегружаются, по причине невозможности перегрузки операции прсвоения.

=, ., ?:, ->, new, is, sizeof, typeof

Операции, не подлежащие перегрузке.

Префиксные операции ++ и -- перегружаются парами.

Операции сравнения перегружаются парами. Если перегружается операция ==, также должна перегружаться опеация !=. То же самое относится к парам < и >, <= и >=.