Compartir a través de


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