¿Qué es la
sobrecarga de operadores?
La sobrecarga de operadores es una técnica para
redefinir un operador incorporado. C#, con la ayuda de la sobrecarga de
operadores, nos permite usar los mismos operadores integrados de diferentes
maneras. Podemos construir implementaciones definidas por el usuario de
varias operaciones donde uno o ambos operandos son del tipo definido por el
usuario.
Reglas para la
sobrecarga de operadores
Para sobrecargar un operador, debemos usar la palabra
clave operator. Tenemos que usar ambos modificadores public y static en
la declaración. El operador unario tendrá uno y el operador binario tendrá
dos parámetros de entrada. Al menos un parámetro debe ser de tipo Type o Type? en
cada caso, donde Type es el tipo que contiene la declaración del operador.
¿Podemos
sobrecargar a todos los operadores?
Podemos sobrecargar la mayoría de los operadores
en C#. Pero hay algunos operadores que no podemos sobrecargar y algunos
que podemos con ciertas condiciones:
Operadores |
Comentarios |
+, -, !, ~, ++, --, verdadero, falso |
Podemos sobrecargar estos operadores unarios. |
+, -, *, /, %, &, |, ^ (OR lógico),
<<, >> |
Podemos sobrecargar estos operadores binarios. |
==, !=, <, >, <=, >= |
Podemos sobrecargar estos operadores
relacionales binarios. Pero debemos sobrecargarlos en
parejas. Entonces, si sobrecargamos al ==operador, también debemos
sobrecargar al !=operador y viceversa. Otros pares son
los operadores y y los <operadores y .><=>= |
&&, || |
No podemos sobrecargar estos operadores lógicos
condicionales directamente. |
+=, -=, *=, /=, %=, &=, |=, ^=, <<=,
>>= |
No podemos sobrecargar estos operadores de
asignación compuestos explícitamente. Pero si sobrecargamos un operador
binario, el operador de asignación compuesto correspondiente también se
sobrecargará indirectamente. Por ejemplo, el +=operador se evalúa
utilizando el +operador. Entonces, si sobrecargamos el operador
binario +, el +=operador se sobrecargará implícitamente. |
^ (Índice del operador final), =, ., ?., ?:,
??, ??=, .., ->, =>, (), como, en espera, marcado, no marcado,
predeterminado, delegado, es , nombre de, nuevo, tamaño de, stackalloc,
interruptor, tipo de, con |
No podemos sobrecargar estos operadores. |
DEMOSTRACIÓN
En nuestro proyecto de consola, crearemos una clase llamada "Juguete":
En el método Main crearemos varias instancias de la clase "Juguete", colocandole sus nombres y diferentes precios.
Luego crearemos otros dos métodos que sobrecarguen a los operadores Igual (==) y Diferente (!=)
Para finalizar crearemos dos últimos métodos que sobrecarguen a los Operadores MayorIgualQue (>=) y MenorIgualQue (<=)
De vuelta al Método Main, escribiremos en la consola el siguiente fragmento de código para que active los métodos de los operadores sobrecargados:
El resultado