[已解决问题] IList与Collection的区别,集合与数组的关系
提问时间: 2007-12-26 18:24
悬赏分:10 浏览:778 次

        //public IList<CategoryInfo> GetCategories() //原文
         public Collection<CategoryInfo> GetCategories()//更改后
        {
            //IList<CategoryInfo> categories = new //原文
List<CategoryInfo>();

            Collection<CategoryInfo> categories = new Collection<CategoryInfo>();          //更改后
   using(SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null))
            {
                while (rdr.Read())
                {
                    CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
                    categories.Add(cat);
                }
            } 
            return categories;
        }
我更改后可以正常运行,我想问下IList与Collection的区别,集合与数组的关系

【petshop】IList与Collection的区别,集合与数组的关系
我看书后的理解:集合更好控制,安全,数组安全性差

还有些知识有些模糊,望大家帮我指正,谢谢



问题补充:集合与数组分别用在哪些地方

最佳答案
IList应该称之为列表比较合适,与数组很相像但还是有区别的。
原则上讲,列表是一种有序的集合,列表与集合语义上对应的接口应该是IList和ICollection,看看MSDN就可以知道,Collection只提供迭代功能,而IList继承于ICollection,然后又提供下标索引的功能,因此它是有序的,你可以改变元素的位置。

.NET的类有些混乱,比如说这个Collection类竟然就实现了IList接口,其实这是违反直觉,容易造成混乱的事情,另外还有一个叫SortedList,它虽然叫List,但实际上并没有实现IList接口,反而是实现了IDictionary和ICollection接口。

在数据交换中使用接口而不是具体类是比较普遍的原则,类似上面其实可以不要更改GetCategories的返回类型,而直接返回一个Collection<T>实例,这样是允许的,因为对调用GetCategories的人来说,它只关心这是不是一个列表,或者是一个集合就行了,具体是什么具体类都可以,借此可以提高调用者与被调用者双方的自由度,降低耦合
2007/12/27 14:11:47 回答者:Klesh Wong
其它回答(1)
Collection<T>实现了IList<T>,因此你更改后是没有问题的,甚至可以IList<CategoryInfo> categories = new Collection<CategoryInfo>()。
Collection<T>与IList<T>的区别不是集合与数组的区别。
如果你自己要创建泛型集合,那么可以继承自Collection<T>。
4个月前   回答者:麒麟.NET - 菜鸟二级
评论
4个月前   Vincent Love :
那请问数组与集合有什么区别
4个月前   Klesh Wong :
具体类的名称还是说明不了什么问题的,到底它是列表还是集合,还得看它实现了哪些接口
4个月前   Vincent Love :
麒麟.NET 
Klesh Wong 
----
谢谢两位的回答
慢慢理解了集合与数组的区别,也了解了arraylist与ilist的相关知识

   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除