Compartir a través de


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