IList和List的思考

IList在ASP.NET2.0后就是一个泛型强类型集合了,它也是一种面向接口思想的体现。

想说说我做的的IList<T>和List<T>吧,还是拿petshop举例说明:

1 public IList<CategoryInfo> GetCategories() {
2
3 IList<CategoryInfo> categories =new List<CategoryInfo>();
4
5 //Execute a query to read the categories
6  using(SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null)) {
7 while (rdr.Read()) {
8 CategoryInfo cat =new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));
9 categories.Add(cat);
10 }
11 }
12 return categories;
13 }

上面这段代码是用IList来实现的,因为petshop4.0在IDAL中定义了一序列的接口都是用IList来实现的,这样的好处是应该是便于在

DALFactory中实现接口转化吧。

其实上面的那段代码完全可以吧IList<T>替换成List<T>,但这样就违背了petshop的面向编程的思想,在DALFactory中也就无法对其进行转换实例吧。

接下来还是来比较下IList和List吧,Ilist实际上也是一个接口,所以IList<T>定义的方法要你自己去实现,如在DALFactory就是我们自己去实现的。

但是那List<T>是已经实现的Ilst<T>吧。

在网上找到了一个非常经典的例子我就直接摘抄下来了:

IList <Class1> IList11 =new List <Class1>();
List <Class1> List11 =new List <Class1>();

这两行代码,从操作上来看,实际上都是创建了一个List<Class1>对象的实例,也就是说,他们的操作没有区别。

只是用于保存这个操作的返回值变量类型不一样而已。

那么,我们可以这么理解,这两行代码的目的不一样。
List <Class1> List11 =new List <Class1>();
是想创建一个List<Class1>,而且需要使用到List<T>的功能,进行相关操作。

IList <Class1> IList11 =new List <Class1>();
只是想创建一个基于接口IList<Class1>的对象的实例,只是这个接口是由List<T>实现的。所以它只是希望使用到IList<T>接口规定的功能而已。

 

posted @ 2011-07-12 09:17  小霖2012  阅读(348)  评论(0编辑  收藏  举报