jueves, 26 de mayo de 2011

Caso practico por que usar una Interfaz

a causa del post anterior Cannot serialize member 'Objects' of type 'System.Collections.Generic.IList`1.... varios me preguntaron por que usar Ilist y no List directamente.


Bueno aquí un pequeño y muy cotidiano ejemplo, que sirve para entender las gracias de las interfaces.


Supongamos que tenemos 2 clases una llamada "auto" y otra "camion" y ambas tienen un numero de patente. y en algún reporte o pantalla solo tenemos que listar solo la Patente seria de la siguiente forma.


public interface IPatentable {
String Patente { set; get; }
}

public class Auto:IPatentable {
public String Patente { set; get; }
public Int32 CantidadDePuertas { set; get; }
}

public class Camion:IPatentable {
public String Patente { set; get; }
public Int64 Peso { set; get; }
}


y después en un objeto Dao, para rescatar los datos desde algún origen, ya sea base de datos, webservice, etc.:


public IList<IPatentable> GetPAtentes() {
var auto1 = new Auto { Patente = "yk99998", CantidadDePuertas = 5 };
var auto2 = new Auto { Patente = "cd1543", CantidadDePuertas = 3 };

var camion1 = new Camion() { Patente = "AD7777", Peso = 5000 };
var lista = new List<IPatentable>();
lista.Add(auto1);
lista.Add(auto2);
lista.Add(camion1);

return lista;
}



y por ultimo simplemente lo llamamos y nos retornara una lista de Ipatentable, el cual puede contener cualquier objeto que implemente esta interfaz.

de la siguiente forma:


var listPatentes = new patenteDAo().GetPAtentes();
foreach (var foo in listPatentes)
Console.Write(foo.Patente);



En resumen una interfaz es un como un contrato, en este ejemplo no nos importa si el objeto es un cambion o auto, solo nos interesa que tenga una patente y para eso los objetos deben implementar esta interfaz.


Para este ejemplo igual se pueden usar herencia , con una clase Abtracta por ejemplo

--
Atte.
Victor Hugo Saavedra
http://vhspiceros.blogspot.com

No hay comentarios:

Publicar un comentario