IList和List的思考
IList在ASP.NET2.0后就是一个泛型强类型集合了,它也是一种面向接口思想的体现。
想说说我做的的IList<T>和List<T>吧,还是拿petshop举例说明:
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>接口规定的功能而已。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南