Partilhar via


Operadores sobrecarregável (guia de programação de C#)

C# permite tipos definidos pelo usuário sobrecarregar operadores, definindo as funções de membro estático usando o operador palavra-chave. Entretanto, nem todos os operadores podem ser sobrecarregados, e outros têm restrições, conforme listado nesta tabela:

Operadores

Sobrecarga

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

Esses operadores unários podem ser sobrecarregados.

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

Esses operadores binários podem ser sobrecarregados.

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

Os operadores de comparação podem ser sobrecarregados (mas consulte a observação que segue esta tabela).

&&, ||

Os operadores lógicos condicionais não podem ser sobrecarregados, mas eles são avaliados usando & e |, que podem ser sobrecarregados.

[]

O operador de indexação de matriz não pode ser sobrecarregado, mas você pode definir indexadores.

()

O operador de conversão não pode ser sobrecarregado, mas você pode definir novos operadores de conversão (consulte explícita e implícita).

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

Operadores de atribuição não podem ser sobrecarregados, mas +=, por exemplo, é avaliado usando +, que podem ser sobrecarregados.

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

Esses operadores não podem ser sobrecarregados.

ObservaçãoObservação

Os operadores de comparação se sobrecarregado, devem ser sobrecarregados em pares; ou seja, se == está sobrecarregado, != também deve ser sobrecarregados. O inverso também é verdadeiro e semelhantes para < e >e <= e >=.

Para sobrecarregar um operador em uma classe personalizada requer a criação de um método na classe com a assinatura correta. O método deve ser nomeado "operador X" onde x é o nome ou o símbolo do operador que está sendo sobrecarregado. Operadores unários têm um parâmetro e operadores binários tem dois parâmetros. Em cada caso, um parâmetro deve ser o mesmo tipo de classe ou struct que declara o operador, conforme demonstrado no exemplo a seguir:

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

Para obter mais informações, consulte How to: Use a sobrecarga de operador para criar uma classe para Número complexos (guia de programação de C#).

Consulte também

Referência

Statements, Expressions, and Operators (C# Programming Guide)

Operadores (guia de programação de C#)

C# Operators

Conceitos

C# Programming Guide

Outros recursos

Por que são operadores sobrecarregados sempre estáticos em C#?