Operadores sobrecarregáveis (Guia de Programação em C#)
C# permite que 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 |
---|---|
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 cast 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. |
|
=, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof |
Esses operadores não podem ser sobrecarregados. |
Dica
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 para <= 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 do mesmo tipo que a 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 Como usar sobrecarga de operador para criar uma classe de número complexo (Guia de Programação em C#).
Consulte também
Referência
Instruções, expressões e operadores (Guia de Programação em C#)
Operadores (Guia de Programação em C#)
Conceitos
Outros recursos
Por que são operadores sobrecarregados sempre estáticos em C#?