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

  • 相关阅读:
    【MOSS】SPUser的操作
    退出登录跳出框架页
    F12转到定义时,总是显示从元数据 转载粘贴
    简易代码生成器
    C语言I博客作业04
    第一周作业
    C语言I博客作业02
    C语言I博客作业02
    【DukeImage】Week_5 Segmentation
    【LeetCode】#7 Reverse Integer
  • 原文地址:https://www.cnblogs.com/huaizuo/p/2103655.html
Copyright © 2020-2023  润新知