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( )