Operadores sobrecargables (Guía de programación de C#)Overloadable operators (C# Programming Guide)

C# permite que los tipos definidos por el usuario sobrecarguen operadores al definir funciones miembro estáticas mediante la palabra clave operator.C# allows user-defined types to overload operators by defining static member functions using the operator keyword. Sin embargo, no todos los operadores se pueden sobrecargar y algunos presentan restricciones, como se muestra en esta tabla:Not all operators can be overloaded, however, and others have restrictions, as listed in this table:

OperadoresOperators Posibilidad de sobrecargaOverloadability
+, -, !, ~, ++, --, true, false+, -, !, ~, ++, --, true, false Estos operadores unarios se pueden sobrecargar.These unary operators can be overloaded.
+, -, *, /, %, &, |, ^, <<, >>+, -, *, /, %, &, |, ^, <<, >> Estos operadores binarios se pueden sobrecargar.These binary operators can be overloaded.
==, !=, <, >, <=, >===, !=, <, >, <=, >= Los operadores de comparación se pueden sobrecargar (pero consulte la nota que aparece a continuación de la tabla).The comparison operators can be overloaded (but see the note that follows this table).
&&, ||&&, || Los operadores lógicos condicionales no se pueden sobrecargar, pero se evalúan mediante & y |, que se pueden sobrecargar.The conditional logical operators cannot be overloaded, but they are evaluated using & and |, which can be overloaded.
[][] El operador de indexación de matriz no se puede sobrecargar, pero es posible definir indexadores.The array indexing operator cannot be overloaded, but you can define indexers.
(T)x(T)x El operador de conversión no se puede sobrecargar, pero es posible definir operadores de conversión nuevos (vea explicit e implicit).The cast operator cannot be overloaded, but you can define new conversion operators (see explicit and implicit).
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>= Los operadores de asignación no pueden sobrecargarse explícitamente.Assignment operators cannot be explicitly overloaded. Pero cuando se sobrecarga un operador binario, el operador de asignación correspondiente, si lo hay, también se sobrecarga de modo implícito.However, when you overload a binary operator, the corresponding assignment operator, if any, is also implicitly overloaded. Por ejemplo, += se evalúa con +, que se pueden sobrecargar.For example, += is evaluated using +, which can be overloaded.
=, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof=, ., ?:, ??, ->, =>, f(x), as, checked, unchecked, default, delegate, is, new, sizeof, typeof Estos operadores no se pueden sobrecargar.These operators cannot be overloaded.

Nota

Los operadores de comparación, si se sobrecargan, deben sobrecargarse en pares; es decir, si == está sobrecargado, también debe estarlo !=.The comparison operators, if overloaded, must be overloaded in pairs; that is, if == is overloaded, != must also be overloaded. Esto también ocurre a la inversa, donde la sobrecarga de != requiere una sobrecarga de ==.The reverse is also true, where overloading != requires an overload for ==. Lo mismo puede ocurrir para los operadores de comparación < y > y para <= y >=.The same is true for comparison operators < and > and for <= and >=.

Para obtener información sobre cómo sobrecargar un operador, vea el artículo sobre la palabra clave operator.For information about how to overload an operator, see the operator keyword article.

Vea tambiénSee also