Partilhar via


Sobrecargas de operador

Sobrecargas de operador permitem tipos sejam combinados e comparados usando operadores, como "+", "-", "=" e "! =". Adicionando sobrecargas de operador para um tipo, você pode permitir que os desenvolvedores usem o tipo, como se fosse um tipo primitivo interno. Sobrecarga de operador deve ser feito somente quando o significado da operação é intuitivo para o tipo (por exemplo, para suporte à adição de duas instâncias de um tipo que representa um valor numérico). Sobrecarga de operador não deve ser usado para fornecer um atalho sintático para operações não-intuitivas.

O exemplo a seguir mostra a assinatura para a operação de adição da DateTime classe.

[Visual Basic]

Public Shared Function op_Addition(ByVal d As DateTime, _
ByVal t As TimeSpan _
) As DateTime

[C#]

public static DateTime op_Addition(
DateTime d, 
TimeSpan t
);

Evite definir sobrecargas de operador, exceto em tipos que devem funcionar como tipos primitivos de (internos).

Considere a definição de sobrecargas do operador em um tipo que deve funcionar como um tipo primitivo.

Por exemplo, String define o operador = = e o operador! =.

Defina as sobrecargas de operador em estruturas que representam os números (como decimal).

Não se inteligente ao definir o operador sobrecargas. Sobrecarga de operador é útil em casos onde ele é imediatamente óbvio qual será o resultado da operação. Por exemplo, faz sentido para poder subtrair um objeto de DateTime de outro objeto de DateTime e obter um objeto TimeSpan. No entanto, não é apropriado para usar o operador de união lógico para consultas união de dois banco de dados ou usar o operador de deslocamento para gravar em um fluxo.

Não fornecem sobrecargas do operador a menos que pelo menos um dos operandos é do tipo definindo a sobrecarga.

O compilador C# impõe essa diretriz.

Os operadores de forma simétrica de sobrecarga.

Por exemplo, se você sobrecarregar o operador de igualdade, também deverá sobrecarregar o operador de desigualdade. Da mesma forma, se você sobrecarregar o menor-que o operador, você também deverá sobrecarregar maior-que o operador.

Considere fornecer métodos com nomes amigáveis, correspondente a cada operador sobrecarregado.

Você deve cumprir esta diretriz para ser compatível com CLS. A tabela a seguir contém uma lista de símbolos de operador e seus correspondentes métodos alternativos e nomes de operador.

Símbolo do operador C#

Nome do método alternativo

Nome do operador

Não definido

ToXxx ou FromXxx

op_Implicit

Não definido

ToXxx ou FromXxx

op_Explicit

+ (binário)

Adicionar

op_Addition

-(binário)

Subtrair

op_Subtraction

* (binário)

Multiplicar

op_Multiply

/

Dividir

op_Division

%

Mod

op_Modulus

^

Xor

op_ExclusiveOr

& (binário)

BitwiseAnd

op_BitwiseAnd

|

BitwiseOr

op_BitwiseOr

&&

And

op_LogicalAnd

||

Ou

op_LogicalOr

=

Atribuir

op_Assign

<<

LeftShift

op_LeftShift

>>

RightShift

op_RightShift

Não definido

LeftShift

op_SignedRightShift

Não definido

RightShift

op_UnsignedRightShift

==

Equals

op_Equality

>

CompareTo

op_GreaterThan

<

CompareTo

op_LessThan

!=

Equals

op_Inequality

>=

CompareTo

op_GreaterThanOrEqual

<=

CompareTo

op_LessThanOrEqual

*=

Multiplicar

op_MultiplicationAssignment

-=

Subtrair

op_SubtractionAssignment

^=

Xor

op_ExclusiveOrAssignment

<<=

LeftShift

op_LeftShiftAssignment

%=

Mod

op_ModulusAssignment

+=

Adicionar

op_AdditionAssignment

&=

BitwiseAnd

op_BitwiseAndAssignment

|=

BitwiseOr

op_BitwiseOrAssignment

,

Vírgula

op_Comma

/=

Dividir

op_DivisionAssignment

--

Decréscimo

op_Decrement

++

Incremento

op_Increment

-(unário)

Negar

op_UnaryNegation

+ (unário)

Plus

op_UnaryPlus

~

OnesComplement

op_OnesComplement

Portions Copyright 2005 Microsoft Corporation. Todos os direitos reservados.

Portions Copyright Addison-Wesley Corporation. Todos os direitos reservados.

Para obter mais informações sobre as diretrizes de design, consulte a "diretrizes de Design do Framework: Convenções, idiomas e padrões de reutilizável.Bibliotecas de rede" catálogo por Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.

Consulte também

Outros recursos

Diretrizes de Design do membro

Diretrizes de Design para desenvolvimento bibliotecas de classe