Перегружаемые операторы (Руководство по программированию в C#)
В C# пользовательские типы могут перегружать операторы путем определения функций статических членов с помощью ключевого слова operator.Не все операторы могут быть перегружены, а для некоторых операторов есть ограничения. См. следующую таблицу:
Операторы |
Возможность перегрузки |
---|---|
Эти унарные операторы нельзя перегрузить. |
|
Эти бинарные операторы нельзя перегрузить. |
|
Операторы сравнения можно перегрузить (но см. примечание после таблицы). |
|
Условные логические операторы нельзя перегрузить, но они вычисляются с помощью операторов & и |, допускающих перегрузку. |
|
Оператор индексирования массива нельзя перегрузить, но можно определить индексаторы. |
|
Оператор приведения нельзя перегрузить, но можно определить новые операторы преобразования (см. explicit и implicit). |
|
Операторы присвоения нельзя перегрузить, но, например, += вычисляется с помощью +, допускающего перегрузку. |
|
=" ." ?:" ??" - >" =>" f (x)" Вставить как" checked" unchecked" значение по умолчанию" делегат" существует" создать" sizeof" typeof |
Эти операторы нельзя перегрузить. |
Примечание |
---|
Операторы сравнения можно перегружать, но только парами: если перегружен оператор ==, то != также должен быть перегружен.Обратный принцип также действителен и действует для операторов < и >, а также для <= и >=. |
Для перегрузки оператора в пользовательском классе нужно создать метод в классе с правильной сигнатурой.Метод нужно назвать "operator X", где X — имя или символ перегружаемого оператора.Унарные операторы имеют один параметр, а бинарные — два.В каждом случае один параметр должен быть такого же типа, как класс или структура, объявившие оператор, как показано в следующем примере.
public static Complex operator +(Complex c1, Complex c2)
Дополнительные сведения см. в разделе Практическое руководство. Перегрузка операторов для реализации класса комплексных чисел (Руководство по программированию в C#).
См. также
Ссылки
Операторы и выражения (Руководство по программированию на C#)
Операторы (Руководство по программированию на C#)
Основные понятия
Руководство по программированию на C#
Другие ресурсы
Почему перегруженные операторы всегда является статическим в c#?