IList 和 IList<T> 的区别和联系是什么呢?
你可以用REFLECTOR反编译看看。
1——
IList<T>这个接口集成自IList,那么凡是IList<T>类型的对象都可以转换为IList类型来使用。
2——
IList<T>对IList有简单的扩展,但主要还是支持了泛型,想想,从IList里取出一个对象后,我们还要通过类型转换才能使用目标对象的属性与方法,那多么麻烦?而IList<T>却不需要。
IList list; int len = (list[i] as string).Length;
IList<string> list; int len = list[i].Length;
此外,IList<T>同时也限定了望集合里添加元素的时候,目标元素必须是与泛类型T兼容的(派生自T或是T的默认值):
IList list = new List(); list.Add(1); list.Add("a"); list.Add(DateTime.Now); list.Add(new object()); list.Add(new StringBuilder());
IList<string> list = new List<string>(); list.Add(1);//错误,类型不兼容 list.Add("a"); list.Add(DateTime.Now);//错误,类型不兼容 list.Add(new object());//错误,类型不兼容 list.Add(new StringBuilder());//错误,类型不兼容 list.Add(""); list.Add(null); IList<int> list2 = new List<int>(); list2.Add(1); list2.Add(-1); list2.Add(0); list2.Add('a'); list2.Add((short)3); list2.Add("a"); list2.Add(DateTime.Now);//错误,类型不兼容 list2.Add(new object());//错误,类型不兼容 list2.Add(new StringBuilder());//错误,类型不兼容 list2.Add("");//错误,类型不兼容 list2.Add(null);//错误,类型不兼容
最后,在某种情况下,你可以把IList当作是IList<object>的一个特例,虽然他们之间并非是这样的关系。
厉害..理解果然深刻
list实现了Ilist接口