Interfaces

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