首页新闻找找看学习计划

IList 和 IList<T> 的区别和联系是什么呢?

0
[已解决问题] 解决于 2012-05-17 21:56

IList 和 IList<T> 的区别和联系是什么呢?

< >
分享
最佳答案
1

你可以用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>的一个特例,虽然他们之间并非是这样的关系。

奖励园豆:5
无之无 | 大侠五级 |园豆:5085 | 2012-05-17 17:01

厉害..理解果然深刻

程序员最后都要送外卖 | 园豆:229 (菜鸟二级) | 2012-05-17 17:17
其他回答(1)
0

list实现了Ilist接口

--宁静以致远-- | 园豆:364 (菜鸟二级) | 2012-05-17 21:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册