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