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?

Preguntas similare

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?
Respuesta Responder a este mensaje
#2 ANT1
08/08/2007 - 16:14 | Informe spam
Gracias por la aclaracion Octavio.

Tienes razon al decir que no s puede instanciar una interface. No
recordaba que a la hora de definir un IList hacia lo siguiente:

IList<Persona> listaPersonas = new ArrayList();

Lo unico comentarte que a mi no me permitio en su momento hacer el
cast que comentas:

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



A la hora de compilar me decia que no podia realizarse.

Lo solucione como:

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

Un saludo y gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida