Duda teorica de novato sobre List e IList

08/08/2007 - 11:38 por ANT1 | Informe spam
Hola.

Trabajando hasta ahora me habia dado cuenta de que el interfaz IList
era diferente a la coleccion List, pero no entiendo muy bien cuales
son las diferencias.

Una List implementa a IList, pero yo puedo perfectamente definir en
una clase mia una coleccion IList<Persona> ListaPersonas y tabajar con
ella como si fuese un List<>.

Pero si por ejemplo quiero trabajar con una coleccion no puedo hacer
esto:

List<Persona> OtraLista = ListaPersona;

¿Por que?
 

Leer las respuestas

#1 Octavio Hernandez
08/08/2007 - 12:52 | Informe spam
Hola,

Una interfaz es simplemente una especificación de una cierta funcionalidad.
Cuando dices q List<T> implementa IList<T>, simplemente estás diciendo q
List<T> cumple con la especificación de esa interfaz, o sea que tiene todas
las propedades, métodos, etc. que esa interfaz especifica.

Ahora bien, NO SE PUEDE instanciar una interfaz, solo una clase. Por eso
aunque declares algo como IList<T>, solo podrás asignarle un objeto que sea
List<T> (o de cualquier otra clase q satisfaga esa interfaz):

IList<Persona> ListaPersona = new List<Persona>();

La asignación que dices:

List<Persona> OtraLista = ListaPersona;

no compila porque el compilador no tiene la certeza de que ListaPersona es
de tipo List<Persona>; potencialmente podría ser de cualquier otra clase que
implemente esa interfaz. Si sabes que lo es, indícalo explícitamente:

List<Persona> OtraLista = (List<Persona>) ListaPersona;

En general, es más conveniente seguir declarando las cosas como IList<T>
porque a) te ahorras la conversión explícita y b) mantienes tu codigo
ABIERTO a la posibilidad de que aparezca en el futuro otra clase que
implemente IList<T> con la que quieras trabajar.

Slds - Octavio



"ANT1" wrote in message
news:
Hola.

Trabajando hasta ahora me habia dado cuenta de que el interfaz IList
era diferente a la coleccion List, pero no entiendo muy bien cuales
son las diferencias.

Una List implementa a IList, pero yo puedo perfectamente definir en
una clase mia una coleccion IList<Persona> ListaPersonas y tabajar con
ella como si fuese un List<>.

Pero si por ejemplo quiero trabajar con una coleccion no puedo hacer
esto:

List<Persona> OtraLista = ListaPersona;

¿Por que?

Preguntas similares