Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

10.9.1Перегрузка индексатора

Правила разрешения перегрузки индексаторов описаны в §7.5.2.

10.10Операторы

Оператор является членом, определяющим значение оператора выражения, который можно применить к экземплярам класса. Операторы объявляются с помощью объявлений_операторов:

объявление_оператора: атрибутынеобязательно модификаторы_оператора декларатор_оператора тело_оператора

модификаторы_оператора: модификатор_оператора модификаторы_оператора модификатор_оператора

модификатор_оператора: public static extern

декларатор_оператора: декларатор_унарного_оператора декларатор_двоичного_оператора декларатор_оператора_преобразования

декларатор_унарного_оператора: тип operator перегружаемый_унарный_оператор ( тип идентификатор )

перегружаемый_унарный_оператор: один из следующих + - ! ~ ++ -- true false

декларатор_двоичного_оператора: тип operator перегружаемый_двоичный_оператор ( тип идентификатор , тип идентификатор )

перегружаемый_двоичный_оператор: + - * / % & | ^ << shift_cправа == != > < >= <=

декларатор_оператора_преобразования: implicit operator тип ( тип идентификатор ) explicit operator тип ( type идентификатор )

тело_оператора: блок ;

Есть три категории перегружаемых операторов: унарные операторы (§10.10.1), бинарные операторы (§10.10.2) и операторы преобразования (§10.10.3).

Если в объявление оператора включен модификатор extern, оператор называется внешним оператором. Так как внешний оператор не предоставляет фактическую реализацию, его тело_оператора состоит из точки с запятой. Для всех других операторов тело_оператора состоит из блока, в котором указаны операторы, выполняемые при вызове этого оператора. Блок оператора должен удовлетворять правилам для методов, возвращающих значение, описанным в §10.6.10.

Следующие правила применяются ко всем объявлениям операторов:

  • объявление оператора должно включать оба модификатора: public и static;

  • параметрами оператора должны быть параметры-значения. Указание в объявлении оператора параметров ref или out является ошибкой времени компиляции;

  • сигнатура оператора (§10.10.1, §10.10.2, §10.10.3) должна отличаться от сигнатур всех других операторов, объявленных в этом же классе;

  • все типы, на которые ссылается объявление оператора, должны быть, по крайней мере, так же доступными, как сам оператор (§3.5.4);

  • неоднократное появление одного и того же модификатора в объявлении оператора является ошибкой времени компиляции.

Каждая категория операторов налагает дополнительные ограничения, как описано в следующих разделах.

Подобно другим членам, операторы, объявленные в базовом классе, наследуются производными классами. Так как объявления операторов всегда требуют участия класса или структуры, где объявлен оператор, в сигнатуре оператора, то для оператора, объявленного в производном классе, невозможно скрыть оператор, объявленный в базовом классе. Таким образом, модификатор new никогда не требуется и поэтому никогда не допускается в объявлении оператора.

Дополнительные сведения об унарных и бинарных операторах можно найти в §7.3.

Дополнительные сведения об операторах преобразования можно найти в §6.4.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]