Cuando tenemos varias clases que tienen que implementar el mismo método, es aconsejable utilizar «interfaces». Son como las clases (propiedades, métodos y eventos) pero no contienen código. La codificación se hará en la clase que implementa la interfaz.
interface Comparable {
int compare (Object o1);
}
...
...
public class Cliente:Persona, Comparable {
...
...
public int compare (Object o1) {
Cliente c;
if (o1 is Cliente) {
c = (Cliente)o1;
}
else {
throw new InvalidCastException();
}
return elApellido.CompareTo(c.elApellido);
// 1 si el Apellido de o1 es mayor al de la instancia
// 0 si los apellidos son iguales
// -1 si el Apellido de la instancia es mayor
}
Si queremos crear una rutina de ordenación genérica las interfaces nos van a ayudar a realizar esta tarea:
public static void ordenacion(Comparable[] matriz) {
Comparable o;
for (int i = 0; i < matriz.Lenght -1; i++) {
for (int j = i + 1; j < matriz.Lenght; j++) {
if (matriz[j].compare(matriz[i]<0) {
o = matriz[j];
matriz[j] = matriz[i];
matriz[i] = o;
}
}
}
}
Ejemplo de utilización:
Cliente[] tab = new Cliente[5];
tab[0] = new Cliente("Pepe2","Apellido2",new DateTime(1969,3,27, 2);
tab[1] = new Cliente("Pepe4","Apellido4",new DateTime(1969,3,27, 2);
tab[2] = new Cliente("Pepe3","Apellido3",new DateTime(1969,3,27, 2);
tab[3] = new Cliente("Pepe1","Apellido1",new DateTime(1969,3,27, 2);
Extensiones.ordenacion(tab);
for (int i=0; i< tab.Lenght; i++) {
Console.WriteLine(tab[i].apellido);
}