C# Sobrecargas


Un método con el mismo nombre que puede recibir parámetros distintos...

Ejemplo de la persona...

public static string EntradaTextoConsola(string mensaje, bool admiteVacio)

    {

        string resultado;

        Console.Write(mensaje);

        resultado = EntradaTexto(admiteVacio);

        return resultado;

    }


    //SOBRECARGAMOS EL MÉTODO ANTERIOR

public static string EntradaTextoConsola(string mensaje, bool admiteVacio, ConsoleColor colorPregunta, ConsoleColor colorRespuesta)

    {

        string resultado;

        ConsoleColor colorOriginal = Console.ForegroundColor;


        Console.ForegroundColor = colorPregunta;

        Console.Write(mensaje);

        Console.ForegroundColor = colorRespuesta;

        resultado = EntradaTexto(admiteVacio);

        Console.ForegroundColor = colorOriginal;

        return resultado;

    }




Hemos sobrecargado el operador + :

public static CPersona operator +(CPersona operando1, CPersona operando2)

    {

        CPersona resultado = new CPersona();

        if (operando1.genero == EGenero.Masculino || operando2.genero != EGenero.Masculino)

        {

            resultado.nombre = operando1.nombre + " " + operando2.nombre;

            resultado.apellido1 = operando1.apellido1;

            resultado.apellido2 = operando2.apellido1;

        }

        else if (operando2.genero == EGenero.Masculino)

        {

            resultado.nombre = operando2.nombre + " " + operando1.nombre;

            resultado.apellido1 = operando2.apellido1;

            resultado.apellido2 = operando1.apellido1;

        }

        resultado.genero = EGenero.Masculino;

        resultado.fechaNacimiento = DateTime.Now;

        return resultado;

      

        //PARA HACER EN CASA


        /* si el primero operando es femenimo será una niña y el primer nombre
         * sera el de la madre y el segundo el del padre, primer apellido del
         * padre y segundo de la madre. Si el primer operando es masculino, el resultado
         * tiene que ser un niño, nombre del padre + nombre de la madre y los apellidos
         * como antes.*/

Si sobrecargamos un operador hay que definir también la sobrecarga del que hace lo contrario.

    public static bool operator >(CPersona oper1, CPersona oper2)

    {

        return (oper1.fechaNacimiento < oper2.fechaNacimiento);

    }


    public static bool operator <(CPersona oper1, CPersona oper2)

    {

        return (oper1.fechaNacimiento > oper2.fechaNacimiento);

    }


    public static bool operator <=(CPersona o1, CPersona o2)

    {

        return (o1.fechaNacimiento >= o2.fechaNacimiento );

    }


    public static bool operator >=(CPersona o1, CPersona o2)

    {

        return (o1.fechaNacimiento <= o2.fechaNacimiento);

    }


    public static bool operator ==(CPersona o1, CPersona o2)

    {

        return (o1.fechaNacimiento == o2.fechaNacimiento);

    }


    public static bool operator !=(CPersona o1, CPersona o2)

    {

        return (o1.fechaNacimiento != o2.fechaNacimiento);

    }


aquí sobrecargamos un operador para comparar una persona con una fecha

public static bool operator >(CPersona o1, DateTime o2)

    {

        return (o1.fechaNacimiento.Date < o2.Date);

    }


public static bool operator <(CPersona o1, DateTime o2)

    {

        return (o1.fechaNacimiento.Date > o2.Date);

    }



En las instrucciones de nuestra clase debemos aclarar que hacen.

Se pueden hacer tantas sobrecargas como variaciones tengamos en los operandos y se puede sobrecargar prácticamente cualquier operador. Dan mucha versatilidad en nuestras clases.

Siempre que hagamos una clase nueva...

  • Suele ser conveniente sobrecargar los operadores de relación porque los utilizaremos para comparar elementos nuestros.
  • (...)
  • (...)
  • Crear override del ToString( )