Sobrecargas de operador
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
);
Evite definir sobrecargas de operadores, excepto en los tipos que deberían funcionar como tipos primitivos (integrados).
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 !=.
Defina las sobrecargas de operadores en estructuras que representan números (como System.Decimal).
No sea demasiado listo cuando defina sobrecargas de operadores. La sobrecarga de operadores resulta de utilidad en los casos en los que el resultado de la operación es obvio. Por ejemplo, tiene sentido poder restar un objeto System.DateTime de otro objeto System.DateTime y obtener un objeto System.TimeSpan. Sin embargo, no es adecuado utilizar el operador de unión lógica para unir dos consultas de base de datos, ni utilizar el operador de desplazamiento para escribir en una secuencia.
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 que sea conforme a 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) |
Agregar |
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 |
|| |
Or |
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 |
+= |
Agregar |
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 “las instrucciones de diseño de Framework: Convenciones, frases realizadas y modelos para libro de bibliotecas reutilizables de .NET” de Krzysztof Cwalina y Brad Abrams, publicados por Addison-Wesley, 2005.
Vea también
Otros recursos
Instrucciones de diseño de miembros
Instrucciones de diseño para desarrollar bibliotecas de clases