Поделиться через


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

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

Операторы

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

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

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

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

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

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

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

&&, ||

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

[]

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

(T)x

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

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

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

=" ." ?:" ??" - >" =>" f (x)" Вставить как" checked" unchecked" значение по умолчанию" делегат" существует" создать" sizeof" typeof

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

ПримечаниеПримечание

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

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

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

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

См. также

Ссылки

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

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

Операторы C#

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

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

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

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