Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Sobrecarga de operadores en C# para tipos personalizados

Puede redefinir o sobrecargar la mayoría de los operadores integrados en C#. Así, un programador puede usar operadores con tipos definidos por el usuario. Los operadores sobrecargados son funciones con nombres especiales: la palabra clave operator seguida del símbolo del operador. Similar a cualquier otra función, un operador sobrecargado tiene un tipo de retorno y una lista de parámetros.

Ejemplo: Sobrecarga del operador +

public static Caja operator+ (Caja b, Caja c) {
    Caja caja = new Caja();
    caja.longitud = b.longitud + c.longitud;
    caja.ancho = b.ancho + c.ancho;
    caja.altura = b.altura + c.altura;
    return caja;
}

Esta función implementa el operador de adición (+) para una clase Caja definida por el usuario. Suma los atributos de dos objetos Caja y devuelve el objeto Caja resultante.

Implementación de la sobrecarga de operadores

Ejemplo completo:

using System;
namespace AplicaciónSobrecargaOperadores {
    class Caja {
        private double longitud;
        private double ancho;
        private double altura;
        
        public double GetVolumen() { return longitud * ancho * altura; }
        public void SetLongitud(double len) { longitud = len; }
        public void SetAncho(double bre) { ancho = bre; }
        public void SetAltura(double hei) { altura = hei; }
        
        // Sobrecarga del operador + para sumar dos objetos Caja
        public static Caja operator+ (Caja b, Caja c) {
            Caja caja = new Caja();
            caja.longitud = b.longitud + c.longitud;
            caja.ancho = b.ancho + c.ancho;
            caja.altura = b.altura + c.altura;
            return caja;
        }
    }
    
    class Probador {
        static void Main(string[] args) {
            Caja Caja1 = new Caja();
            Caja Caja2 = new Caja();
            Caja Caja3 = new Caja();
            double volumen = 0.0;
            
            // Especificaciones caja 1
            Caja1.SetLongitud(6.0); Caja1.SetAncho(7.0); Caja1.SetAltura(5.0);
            // Especificaciones caja 2
            Caja2.SetLongitud(12.0); Caja2.SetAncho(13.0); Caja2.SetAltura(10.0);
            
            volumen = Caja1.GetVolumen();
            Console.WriteLine("Volumen de Caja1: {0}", volumen);
            volumen = Caja2.GetVolumen();
            Console.WriteLine("Volumen de Caja2: {0}", volumen);
            
            // Sumar dos objetos
            Caja3 = Caja1 + Caja2;
            volumen = Caja3.GetVolumen();
            Console.WriteLine("Volumen de Caja3: {0}", volumen);
            Console.ReadKey();
        }
    }
}

Resultado:

Volumen de Caja1: 210
Volumen de Caja2: 1560
Volumen de Caja3: 5400

Operadores sobrecargables y no sobrecargables

Nº Operadores y descripción
1+, -, !, ~, ++, --: Operadores unarios (un operando), pueden sobrecargarse.
2+, -, *, /, %: Operadores binarios (dos operandos), pueden sobrecargarse.
3==, !=, <, >, <=, >=: Operadores de comparación, pueden sobrecargarse.
4&&, ||: Operadores lógicos condicionales, no pueden sobrecargarse directamente.
5+=, -=, *=, /=, %=: Operadores de asignación compuesta, no pueden sobrecargarse.
6=, ., ?:, ->, new, is, sizeof, typeof: No pueden sobrecargarse.

Ejemplo extendido: Sobrecarga de más operadores

using System;
namespace AplicaciónSobrecargaOperadores {
    class Caja {
        private double longitud, ancho, altura;
        
        public double GetVolumen() { return longitud * ancho * altura; }
        public void SetLongitud(double len) { longitud = len; }
        public void SetAncho(double bre) { ancho = bre; }
        public void SetAltura(double hei) { altura = hei; }
        
        public static Caja operator+ (Caja b, Caja c) {
            Caja caja = new Caja();
            caja.longitud = b.longitud + c.longitud;
            caja.ancho = b.ancho + c.ancho;
            caja.altura = b.altura + c.altura;
            return caja;
        }
        
        public static bool operator == (Caja lhs, Caja rhs) {
            return lhs.longitud == rhs.longitud && lhs.altura == rhs.altura && lhs.ancho == rhs.ancho;
        }
        
        public static bool operator !=(Caja lhs, Caja rhs) {
            return lhs.longitud != rhs.longitud || lhs.altura != rhs.altura || lhs.ancho != rhs.ancho;
        }
        
        public static bool operator <(Caja lhs, Caja rhs) {
            return lhs.longitud < rhs.longitud && lhs.altura < rhs.altura && lhs.ancho < rhs.ancho;
        }
        
        public static bool operator >(Caja lhs, Caja rhs) {
            return lhs.longitud > rhs.longitud && lhs.altura > rhs.altura && lhs.ancho > rhs.ancho;
        }
        
        public static bool operator <=(Caja lhs, Caja rhs) {
            return lhs.longitud <= rhs.longitud && lhs.altura <= rhs.altura && lhs.ancho <= rhs.ancho;
        }
        
        public static bool operator >=(Caja lhs, Caja rhs) {
            return lhs.longitud >= rhs.longitud && lhs.altura >= rhs.altura && lhs.ancho >= rhs.ancho;
        }
        
        public override string ToString() {
            return String.Format("({0}, {1}, {2})", longitud, ancho, altura);
        }
    }
    
    class Probador {
        static void Main(string[] args) {
            Caja Caja1 = new Caja();
            Caja Caja2 = new Caja();
            Caja Caja3 = new Caja();
            Caja Caja4 = new Caja();
            double volumen = 0.0;
            
            Caja1.SetLongitud(6.0); Caja1.SetAncho(7.0); Caja1.SetAltura(5.0);
            Caja2.SetLongitud(12.0); Caja2.SetAncho(13.0); Caja2.SetAltura(10.0);
            
            Console.WriteLine("Caja 1: {0}", Caja1.ToString());
            Console.WriteLine("Caja 2: {0}", Caja2.ToString());
            
            volumen = Caja1.GetVolumen();
            Console.WriteLine("Volumen de Caja1: {0}", volumen);
            volumen = Caja2.GetVolumen();
            Console.WriteLine("Volumen de Caja2: {0}", volumen);
            
            Caja3 = Caja1 + Caja2;
            Console.WriteLine("Caja 3: {0}", Caja3.ToString());
            volumen = Caja3.GetVolumen();
            Console.WriteLine("Volumen de Caja3: {0}", volumen);
            
            if (Caja1 > Caja2) Console.WriteLine("Caja1 es mayor que Caja2");
            else Console.WriteLine("Caja1 no es mayor que Caja2");
            
            if (Caja1 < Caja2) Console.WriteLine("Caja1 es menor que Caja2");
            else Console.WriteLine("Caja1 no es menor que Caja2");
            
            if (Caja1 >= Caja2) Console.WriteLine("Caja1 es mayor o igual que Caja2");
            else Console.WriteLine("Caja1 no es mayor o igual que Caja2");
            
            if (Caja1 <= Caja2) Console.WriteLine("Caja1 es menor o igual que Caja2");
            else Console.WriteLine("Caja1 no es menor o igual que Caja2");
            
            if (Caja1 != Caja2) Console.WriteLine("Caja1 no es igual a Caja2");
            else Console.WriteLine("Caja1 no es mayor o igual que Caja2");
            
            Caja4 = Caja3;
            if (Caja3 == Caja4) Console.WriteLine("Caja3 es igual a Caja4");
            else Console.WriteLine("Caja3 no es igual a Caja4");
            
            Console.ReadKey();
        }
    }
}

Resultado:

Caja 1: (6, 7, 5)
Caja 2: (12, 13, 10)
Volumen de Caja1: 210
Volumen de Caja2: 1560
Caja 3: (18, 20, 15)
Volumen de Caja3: 5400
Caja1 no es mayor que Caja2
Caja1 es menor que Caja2
Caja1 no es mayor o igual que Caja2
Caja1 es menor o igual que Caja2
Caja1 no es igual a Caja2
Caja3 es igual a Caja4

Lenguaje C

  1. Mantenimiento Involucrando Operadores: ¿Superan las Ganancias a los Costos Ocultos?
  2. Robot DIY inspirado en Wall‑E con Raspberry Pi y caja de CD
  3. Operadores en C# – Guía completa de operadores en C#
  4. Operador ternario en C#: Guía concisa para expresiones condicionales
  5. Dominando la Sobrecarga de Métodos en C#: Conceptos, Ejemplos y Buenas Prácticas
  6. Dominando la Sobrecarga de Constructores en C#
  7. Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
  8. Dominando la Sobrecarga en C++: Funciones y Operadores Explicados
  9. Fundamentos de MATLAB: Sintaxis Esencial y Comandos Básicos
  10. Dominando la Sobrecarga de Operadores en Python: Guía Práctica
  11. Operador instanceof en Java: Guía completa