2011-09-29 1 views

Répondre

5

Pourquoi ne pas ce travail ?: var foo = (ICollection <IBar>)list;

Disons que T = Foo et il y a une deuxième classe Foo2 : IBar.

Vous pouvez ensuite continuer comme ça:

var foolist = (ICollection <IBar>)list; 
foolist.Add(new Foo2()); // compiles, since Foo2 also implements IBar 

Wham! Vous avez une violation de type à l'exécution, puisque vous avez essayé d'ajouter un Foo2 à un List<Foo>.

Pour éviter cela, ICollection<Foo> est pas un sous-type de ICollection<IBar>, même si Foo est un sous-type de IBar. La théorie derrière cela est co- and contravariance.

Questions connexes