Поиск

Ограничения на перегрузку операторов

Оператор присваивания = перегрузить нельзя. Однако когда вы перегружаете бинарный оператор, оператор присваивания в его составном эквиваленте неявно перегружается. Например, если перегружается оператор +, оператор += неявно перегружается, так что вызывается определенный пользователем метод operator+.

Операторы [] можно перегружать, однако, как вы знаете из главы 7, индексация объектов, определенных пользователем, поддерживается посредством индексаторов.

Скобки, применяемые при приведении типов, также не перегружаются. Вместо этого вы можете применять операторы преобразования, которые также называют нестандартными преобразованиями (о них речь пойдет во второй части этой главы).

Операторы, которые в настоящее время в языке С# не определены, также не перегружаются. Например, вы не можете определить ** как разновидность возведения в степень, поскольку в С# не определен оператор **. Кроме того, нельзя изменить синтаксис операторов. Вы не можете изменить бинарный оператор *, чтобы он принимал три аргумента, поскольку его синтаксис по определению подразумевает два аргумента. И, наконец, старшинство операторов тоже неизменяемо — правила старшинства неизменны (см. главу 10).