我有两种类型,IFoo
和Foo
定义为
public interface IFoo
{
void run()
}
public class Foo : IFoo
{
public void run() {
// ...
}
}
我可以将List<Foo>
分配给IEnumerable<IFoo>
,但不能分配ICollection<IFoo>
或IList<IFoo>
。
IEnumerable<IFoo> fooEnumerable = new List<Foo>();// works fine
ICollection<IFoo> fooCollection = new List<Foo>();// doesn't work
IList<IFoo> fooList = new List<Foo>();// doesn't work
为什么?什么允许IEnumerable
不关心它包含哪种类型,而ICollection
和IList
关注什么?