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>接口规定的功能而已。

 

转载于:https://www.cnblogs.com/huaizuo/archive/2011/07/12/2103655.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值