Перегружаемые операторы (Руководство по программированию в C#)

Обновлен: Ноябрь 2007

В C# пользовательские типы могут перегружать операторы путем определения функций статических членов с помощью ключевого слова operator. Не все операторы могут быть перегружены, а для некоторых операторов есть ограничения. См. следующую таблицу:

Операторы

Возможность перегрузки

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

Эти унарные операторы нельзя перегрузить.

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

Эти бинарные операторы нельзя перегрузить.

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

Операторы сравнения можно перегрузить (но см. примечание после таблицы).

&&, ||

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

[]

Оператор индексирования массива нельзя перегрузить, но можно определить индексаторы.

()

Оператор приведения нельзя перегрузить, но можно определить новые операторы преобразования (см. explicit и implicit).

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

Операторы присвоения нельзя перегрузить, но, например, += вычисляется с помощью +, допускающего перегрузку.

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

Эти операторы нельзя перегрузить.

8edha89s.alert_note(ru-ru,VS.90).gifПримечание.

Операторы сравнения можно перегружать, но только парами: если перегружен оператор ==, то != также должен быть перегружен. Обратный принцип также действителен и действует для операторов < и >, а также для <= и >=.

Для перегрузки оператора в пользовательском классе нужно создать метод в классе с правильной подписью. Метод нужно назвать "operator X", где X — имя или символ перегружаемого оператора. Унарные операторы имеют один параметр, а бинарные — два. В каждом случае один параметр должен быть такого же типа, как класс или структура, объявившие оператор, как показано в следующем примере.

public static Complex operator +(Complex c1, Complex c2)

Дополнительные сведения см. в разделе Практическое руководство. Перегрузка операторов для реализации класса комплексных чисел (Руководство по программированию в C#).

См. также

Основные понятия

Руководство по программированию в C#

Ссылки

Операторы и выражения (Руководство по программированию на C#)

Операторы (руководство по программированию на C#)

Операторы C#

Другие ресурсы

Почему перегруженные операторы всегда являются статическими в C#?