zoukankan      html  css  js  c++  java
  • 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>接口规定的功能而已。

  • 相关阅读:
    大型运输行业实战_day12_1_权限管理实现
    大型运输行业实战_day11_2_事务理论与实际生产配置事务管理
    大型运输行业实战_day11_1_aop理论与aop实际业务操作
    SpringBoot目录文件结构和官方推荐的目录规范、静态资源访问
    SpringBoot常用的注解
    Spring Boot面试题
    Spring常见面试题总结
    dubbo面试题及答案
    nginx面试题及答案
    Mybatis面试题及答案
  • 原文地址:https://www.cnblogs.com/huaizuo/p/2103655.html
Copyright © 2011-2022 走看看