Sobrecarga operadores
La sobrecarga de operadores en C# permite a los tipos definidos por el usuario proporcionar una implementación personalizada de una operación cuando uno o ambos operandos son de ese tipo. En otras palabras, un tipo puede redefinir la acción de un operador en relación con una clase.
Por ejemplo, si tiene una clase Fraccion
que representa una fracción matemática, puede sobrecargar los operadores aritméticos para que funcionen con instancias de Fraccion
. A continuación, se muestra un ejemplo simplificado de cómo se puede sobrecargar el operador de suma (+
) para la clase Fraccion
:
public class Fraccion
{
public int Numerador { get; }
public int Denominador { get; }
public Fraccion(int numerador, int denominador)
{
Numerador = numerador;
Denominador = denominador;
}
public static Fraccion operator +(Fraccion fraccion1, Fraccion fraccion2)
{
int nuevoDenominador = fraccion1.Denominador * fraccion2.Denominador;
int nuevoNumerador = fraccion1.Numerador * fraccion2.Denominador + fraccion2.Numerador * fraccion1.Denominador;
return new Fraccion(nuevoNumerador, nuevoDenominador);
}
}
En este ejemplo, la clase Fraccion
tiene dos propiedades: Numerador
y Denominador
, que representan los componentes de una fracción. La clase también tiene un constructor que toma un numerador y un denominador.
El operador de suma (+
) se ha sobrecargado para que funcione con instancias de Fraccion
. La implementación personalizada del operador de suma toma dos instancias de Fraccion
como parámetros y devuelve una nueva instancia de Fraccion
que representa la suma de las dos fracciones.
Con la sobrecarga de operadores, puede hacer que sus tipos definidos por el usuario se comporten de manera más natural y coherente con los tipos integrados de C#.
De momento no se pueden sobrecargar operadores de arrays pero Microsoft se lo está pensando:
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/operator-overloading