C# proporciona operadores que son apoyados por los tipos incorporados. Hay muchos tipos de operadores, y probablemente el más común es el operador aritmético , con el que ya estás familiarizado. Los operadores tienen una precedencia que define el orden en que son evaluados, y también tienen reglas estrictas. Si está interesado en aprender más sobre la importancia del orden, lea mi guía correspondiente. La razón por la que los desarrolladores suelen añadir operadores a sus tipos o clases personalizadas es para proporcionar compatibilidad con los operadores que ya trabajan con tipos incorporados. La otra razón es que puede que quieras proporcionar una funcionalidad similar a esos operadores incorporados. Esta es una cobertura muy detallada sobre los operadores que puedes sobrecargar.
Imagina, si quieres, que te gustaría crear una pequeña aplicación matemática que produzca la superficie total de dos triángulos en el espacio 2D.
Podrías construir tu clase con la siguiente definición para añadir dos triángulos con métodos de instancia.
1234Triángulo tri1 = nuevo triángulo(2,3,4);Triángulo tri1 = nuevo triángulo(10,15,20);Resultado del triángulo = tri1.Suma(tri2);
csharp
Podrías implementar la solución con métodos estáticos también.
1234Triángulo tri1 = nuevo triángulo(2,3,4);Triángulo tri1 = nuevo triángulo(10,15,20);Resultado del triángulo = Triángulo.Suma(tri1,tri2);
csharp
Hagamos que esto parezca más profesional y tratemos de sobrecargar a nuestro operador para aprovechar el poder de la capacidad C#.
1234Triángulo tri1 = nuevo triángulo(2,3,4);Triángulo tri1 = nuevo triángulo(10,15,20);Resultado del triángulo = tri1 + tri2;
csharp
Vamos a crear nuestra clase, que apoya lo anterior. Necesitamos dos constructores con firmas diferentes, y necesitamos anular el operador + para lograrlo. Hay una fórmula simple para ayudar a calcular la superficie del triángulo: T = (a * ma) / 2 . Esta es la longitud de un lado multiplicada por la distancia más corta entre ese lado y la intersección de los otros dos lados, luego dividida por 2.
1234567891011121314151617181920212223242526272829303132333435363738 que utiliza el sistema;namespace Overloader{publicclassTriangle{publicint a;publicint ma;publicdouble surface;publicTriangle(int a,int ma){this.a = a;this.ma = ma;this.surface =(a * ma)/2;}publicTriangle(double surface){this. superficie = superficie;}publicTriangleoperator+(Triangle tri1,Triangle tri2){Triangle result =newTriangle((tri1.superficie + tri2.superficie));return result;}}classMainer{estaticvoidMain(string[] args){Triangle tri1 =newTriangle(8,12); Console.WriteLine($"El primer triángulo: {nombre de(tri1)} con superficie es:{tri1.superficie}");Triángulo tri2 = nuevo triángulo(14,16); Console.WriteLine($"El segundo triángulo: {nombre de(tri2)} con superficie es:{tri2.superficie}");Triángulo tri3 = tri1 + tri2; Console.WriteLine($"El tercer triángulo: con superficie es:{tri3.superficie} es el producto de {nombre de (tri1)} y {nombre de (tri2)}"); Console.ReadKey();;}}
csharp
En nuestra anulación del operador, simplemente devolvemos una nueva instancia, que se crea con el constructor que toma un solo argumento, que es la superficie.
Llamar a la clase producirá el siguiente resultado.
bash
El nombre del operador sólo se utiliza para imprimir el nombre de las variables de forma dinámica. Toma un objeto y devuelve una cadena con su nombre.