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