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); }