Operadores sobrecargables (Guía de programación de C#)

Actualización: noviembre 2007

C# permite sobrecargar operadores en los tipos definidos por el usuario, mediante la definición, con la palabra clave operator, de funciones miembro estáticas. No obstante, no todos los operadores se pueden sobrecargar y algunos presentan restricciones, como se indica en la siguiente tabla:

Operadores

Posibilidad de sobrecarga

+, -, !, ~, ++, --, true, false

Estos operadores unarios sí se pueden sobrecargar.

+, -, *, /, %, &, |, ^, <<, >>

Estos operadores binarios sí se pueden sobrecargar.

==, !=, <, >, <=, >=

Los operadores de comparación se pueden sobrecargar (pero vea la nota que aparece a continuación de esta tabla).

&&, ||

Los operadores lógicos condicionales no se pueden sobrecargar, pero se evalúan mediante & y |, los cuales sí se pueden sobrecargar.

[]

El operador de indización de matrices no se puede sobrecargar, pero se pueden definir indizadores.

()

El operador de conversión explícita de tipos no se puede sobrecargar, pero se pueden definir nuevos operadores de conversión (vea explicit e implicit).

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

Los operadores de asignación no se pueden sobrecargar, pero +=, por ejemplo, se evalúa con +, el cual sí se puede sobrecargar.

=, ., ?:, ->, new, is, sizeof, typeof

Estos operadores no se pueden sobrecargar.

Nota:

Si se sobrecargan los operadores de comparación, dicha sobrecarga debe realizarse en parejas; es decir, si se sobrecarga ==, también se debe sobrecargar !=. Lo contrario también es cierto y similar para < y >, y para <= y >=.

Sobrecargar un operador en una clase personalizada requiere la creación de un método en la clase con la firma correcta. El método se debe denominar "operador X", donde X es el nombre o símbolo del operador que se va a sobrecargar. Los operadores unarios tienen un parámetro y los operadores binarios tienen dos. En cada caso, un parámetro debe tener el mismo tipo que la clase o estructura que declara el operador, como se muestra en el siguiente ejemplo:

public static Complex operator +(Complex c1, Complex c2)

Para obtener más información, vea Cómo: Utilizar la sobrecarga de operadores para crear una clase de números complejos (Guía de programación de C#).

Vea también

Conceptos

Guía de programación de C#

Referencia

Instrucciones, expresiones y operadores (Guía de programación de C#)

Operadores (Guía de programación de C#)

Operadores de C#

Otros recursos

Why are overloaded operators always static in C#?