zoukankan      html  css  js  c++  java
  • List<T>和IList<T>的区别(转载)

    List<T>和IList<T>的区别

    对List<T>和IList<T>不是很清楚,这看到一篇不错的文章,贴过来了

    List<T>类:表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索、排序和操作的方法。

    IList<T>接口:表示可按照索引单独访问的一组对象。

    下面谈谈它们之间的区别:

    首先,List<T>是一个类,IList<T>是一个接口。接口和类的区别是本质的,类是负责功能的实现,而接口则是负责功能的定义。所以它们的区别本质上也就是类和接口的区别。

    具体来说,IList 泛型接口是 ICollection 泛型接口的子代,并且是所有泛型列表的基接口。它仅仅是所有泛型类型的接口,并没有太多方法可以方便实用,如果仅仅是作为集合数据的承载体,那么使用IList<T>完全可以胜任。但是更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。这个时候IList<T>就爱莫能助了。

    1、当你只想使用接口的方法时,ILis<>这种方式比较好.他不获取实现这个接口的类的其他方法和字段,有效的节省空间.

    2、IList <>是个接口,定义了一些操作方法这些方法要你自己去实现

    List <>是泛型类,它已经实现了IList <>定义的那些方法

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

    再举一个例子,比如你要实现一个集合类,但是你认为添加的时候要做一下判断,不能重复,你可以这样做:

        //方法1:

        public class MyCollection1 : List<MyItem>

        {

            public new void Add(MyItem item)

            {

                if (this.Contains(item)) return;

                base.Add(item);

            }

        }

        //方法2:

        public class MyCollection2 : IList<MyItem>

        {

            private List<MyItem> innerList = new List<MyItem>();

            public void Add(MyItem item)

            {

                if (this.Contains(item)) return;

                base.Add(item);

            }

            //实现n多的方法后,附带的,有个Add方法,实现即可,实现方法略

    }

    如果是从List继承而来,那我如果这样写,就能跳过检查了。但是不会调用你写的Add方法,而是调用List的Add方法。

    MyCollection1 mc1 = new MyCollection1();

    .....

    System.Collection.IList listData = mc1;

    listData.Add(listData[0]);

    这样就不会执行你写的检查代码。但如果用下面方法,则会执行你写的Add方法:

    MyCollection2 mc2 = new MyCollection2();

    .....

    System.Collection.IList listData = mc2;

    listData.Add(listData[0]);

    总之,正如那些高手说的:

    接口实现松耦合...有利于系统的维护与重构...优化系统流程...

    鼓励使用接口

    这样可以实现功能和具体实现的分离

    实现接口分离的原则

    不是看实际需要用的

  • 相关阅读:
    topcoder srm 681 div1
    topcoder srm 683 div1
    topcoder srm 684 div1
    topcoder srm 715 div1
    topcoder srm 685 div1
    topcoder srm 687 div1
    topcoder srm 688 div1
    topcoder srm 689 div1
    topcoder srm 686 div1
    topcoder srm 690 div1 -3
  • 原文地址:https://www.cnblogs.com/lh123/p/3830113.html
Copyright © 2011-2022 走看看