Sobrecargas de operador
Actualización: noviembre 2007
Las sobrecargas de operadores permiten combinar y comparar los tipos utilizando operadores como "+", "-", "=" y "!=". Agregando sobrecargas de operadores a un tipo, se permite a los desarrolladores utilizar el tipo como si fuera un tipo primitivo integrado. La sobrecarga de operadores sólo debería realizarse cuando el significado de la operación es intuitivo para el tipo (por ejemplo, para admitir que se agreguen dos instancias de un tipo que representa un valor numérico). La sobrecarga de operadores no se debería utilizar para proporcionar un acceso directo sintáctico para las operaciones no intuitivas.
El ejemplo siguiente muestra la firma para la operación de suma de la clase DateTime.
[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
);
Considere la posibilidad de definir sobrecargas de operadores en un tipo que debería funcionar como un tipo primitivo.
Por ejemplo, String define un operador == y un operador !=.
No proporcione sobrecargas de operadores a menos que uno de los operandos sea del tipo que define la sobrecarga.
El compilador de C# cumple esta directriz.
Sobrecargue los operadores de manera simétrica.
Por ejemplo, si sobrecarga el operador de igualdad, también debe sobrecargar el operador de desigualdad (distinto de). De forma parecida, si sobrecarga el operador menor que, también debería sobrecargar el operador mayor que.
Considere la posibilidad de asignar a los métodos nombres descriptivos que correspondan a cada operador sobrecargado.
Debe obedecer esta instrucción para mantener la compatibilidad con CLS. La tabla siguiente contiene una lista de símbolos de operadores y los métodos alternativos y nombres de operadores correspondientes.
Símbolo de operador de C# |
Nombre de método alternativo |
Nombre de operador |
---|---|---|
No está definido |
ToXxx o FromXxx |
op_Implicit |
No está definido |
ToXxx o FromXxx |
op_Explicit |
+ (binario) |
Add |
op_Addition |
- (binario) |
Subtract |
op_Subtraction |
* (binario) |
Multiply |
op_Multiply |
/ |
Divide |
op_Division |
% |
Mod |
op_Modulus |
^ |
Xor |
op_ExclusiveOr |
& (binario) |
BitwiseAnd |
op_BitwiseAnd |
| |
BitwiseOr |
op_BitwiseOr |
&& |
And |
op_LogicalAnd |
|| |
O bien |
op_LogicalOr |
= |
Assign |
op_Assign |
<< |
LeftShift |
op_LeftShift |
>> |
RightShift |
op_RightShift |
No está definido |
LeftShift |
op_SignedRightShift |
No está definido |
RightShift |
op_UnsignedRightShift |
== |
Equals |
op_Equality |
> |
CompareTo |
op_GreaterThan |
< |
CompareTo |
op_LessThan |
!= |
Equals |
op_Inequality |
>= |
CompareTo |
op_GreaterThanOrEqual |
<= |
CompareTo |
op_LessThanOrEqual |
*= |
Multiply |
op_MultiplicationAssignment |
-= |
Subtract |
op_SubtractionAssignment |
^= |
Xor |
op_ExclusiveOrAssignment |
<<= |
LeftShift |
op_LeftShiftAssignment |
%= |
Mod |
op_ModulusAssignment |
+= |
Add |
op_AdditionAssignment |
&= |
BitwiseAnd |
op_BitwiseAndAssignment |
|= |
BitwiseOr |
op_BitwiseOrAssignment |
, |
Coma |
op_Comma |
/= |
Divide |
op_DivisionAssignment |
-- |
Decrement |
op_Decrement |
++ |
Increment |
op_Increment |
- (unario) |
Negate |
op_UnaryNegation |
+ (unario) |
Plus |
op_UnaryPlus |
~ |
OnesComplement |
op_OnesComplement |
Portions Copyright 2005 Microsoft Corporation. Reservados todos los derechos.
Portions Copyright Addison-Wesley Corporation. Reservados todos los derechos.
Para obtener más información sobre las directrices de diseño, consulte el libro titulado "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" de Krzysztof Cwalina y Brad Abrams, publicado por Addison-Wesley, 2005.
Vea también
Otros recursos
Instrucciones de diseño de miembros
Instrucciones de diseño para desarrollar bibliotecas de clases