En el siguiente código:Pregunta sobre C# covarianza
interface I1 { }
class CI1: I1 { }
List<CI1> listOfCI1 = new List<CI1>();
IEnumerable<I1> enumerableOfI1 = listOfCI1; //this works
IList<I1> listofI1 = listOfCI1; //this does not
soy capaz de asignar mi "listOfCI1" a un IEnumerable<I1>
(debido a la covarianza)
Pero por qué no soy capaz de asignar a un IList<I1>
? Por lo demás, no puede ni siquiera hacer lo siguiente:
List<I1> listOfI12 = listOfCI1;
No debe covarianza me permite asignar un tipo derivado a un tipo base?
Btw, esa charla fue genial. –
@Arnis: Gracias - Lo disfruté yo mismo, incluso si no pude mostrar el video de Hokey Cokey que había grabado ... –
Jon, también lo hizo el equipo de BCL (IEnumerable: IEnumerable), porque IEnumerable no le permite agregar ningún miembro nuevo (es decir, es inmutable), lo que lo hace seguro. Pero, por otro lado, no se agregó "out" en IList porque es mutable (¿es posible agregar una implementación diferente a la lista subyacente?) –