导读:在机房重构的时候,为了降低耦合,不能返回DataTable型数据,而需要转换为泛型集合。我一直使用的就是IList,那天师傅过来帮我挑错,问我:你为什么一直写IList呢,不应该是List吗?好吧,然后,我才突然发现,我一直都写错了。不过,我真的错了吗?那么,它们之间又是什么关系呢?

一、基础概念

1,集合(ArrayList)

是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。

2,List

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

3,IList

IList 泛型接口是 ICollection 接口的子代,并且是所有非泛型列表的基接口。

二、联系

1,和数组

ArrayList、List从大的范围讲,它们都属于一种数组。

数组在创建时必须要指定数组变量的大小(如果定义的大小不合适,很容易出下标越界的情况,这点深有体会),还有在两个元素之间添加元素也比较困难。但ArrayList、List虽然从属于数组,但它们就完美的解决了数组存在的缺陷。

2,相互

List类是ArrayList类的泛型等效类。它们的使用大小可按需求动态添加数组实现IList接口。

三、区别

1,集合ArrayList和List

ArrayList:它的元素类型不确定,将所有的元素都认定为Object,所以,不管什么对象,都可以采用集合进行存储。但在取数据的时候,就会相对麻烦。

解决集合的缺陷:装箱(把值类型打包到Object引用类型的一个实例中)、拆箱(从对象中提取值类型)。

List:在功能上,与ArrayList无区别。但在声明和实例化时都需要指定其内部项的数据或对象类型。

总结:

元素类型:ArrayList不确定;List确定。                  注:功能无异

2,List和IList

List是一个具体的类,而IList是一个接口。List是IList的一种具体实现。

就比如在重构中,有IUser接口,也有它的实现类SQLUser。

总结:

创建方式不同: IList<string> Ilist1=new List<string>();List<string> list1=new List<string>()

使用方法的范围不同:使用IList创建时,仅可以使用它规定的且被实现的方法;相反,使用List时,可以使用List类中任何方法,包括IList所规定的。

举例:

比如在IUser接口中,规定了4个方法:User_Login,User_Add,User_Delete,User_Query,而在SQLUser类中,我仅仅实现了User_Login方法,但同时写入了一个User_ModifyPWD方法。那么,当我定义了一个接口IUser类时,我就仅仅只可以使用User_Login方法进行登录。而如果我定义一个SQLUser类时,我就可以同时使用User_Login和User_ModifyPWD两个方法。

四、知识总结

我在使用过程中,一直使用IList也没有问题的原因,我认为是因为我每次也都是创建了一个List的对象实例。

灵活性对比:Array〈ArrayList〈List

使用推荐:当我们仅仅只需要使用规定的方法时,就使用IList吧,使用接口创建实例可以降低耦合,对吧?

牛人说:当需要遍历数据或排序时,使用List,效率更高。(没有测试过)

五、个人感受

首先,我想说的是:师傅,你没错;我,也没错。不管是你说的使用List,还是我自己使用的IList,在这个程序中,都是可行的。

再者,我的信心就像是海浪一样,时而高,时而低,每次都来势汹汹。不过,我是不会放弃滴,我要一直磨,总能磨出来。师傅们,你们要相信我!

请大家多指教咯!

.NET重构(二):ArrayList,List,IList的联系和区别的更多相关文章

  1. 集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结

    List (链表|线性表) 特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素 1.创建一个用指定可视行数初始化的新滚动列表.默认情况下,不允许进行多项选择. ...

  2. ArrayList、linklist、list的区别

    List是一个接口,ArrayList和LinkedList是两个实现类,他们实现的方式不一样,其实LinkedList才是真正的链表(如果不清楚什么是链表,需要了解一下相关数据结构的知识,这不是一两 ...

  3. java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  4. ArrayList、Vector、LinkedList的区别

    ArrayList.Vector.LinkedList的区别 1.底层数据结构: ArrayList底层实现是动态数组 Vector底层实现是动态数组 LinkedList底层实现是双链表  2.扩容 ...

  5. ArrayList和LinkedList 的联系和区别

    ArrayList和LinkedList 的联系和区别 1.联系: 都实现了List接口 有序 不唯一(可重复) 2.区别 ArrayList LinkedList

  6. 源码分析二(ArrayList与LinkedList的区别)

    一:首先看一下ArrayList类的结构体系: public class ArrayList<E> extends AbstractList<E> implements Lis ...

  7. C#编程之IList<T>、List<T>、ArrayList、IList, ICollection、IEnumerable、IEnumerator、IQueryable 和 IEnumerable的区别

    额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别...  在C#中 ...

  8. 高性能流媒体服务器EasyDSS前端重构(二) webpack + vue + AdminLTE 多页面提取共用文件, 优化编译时间

    本文围绕着实现EasyDSS高性能流媒体服务器的前端框架来展开的,具体EasyDSS的相关信息可在:www.easydss.com 找到! 接上回 <高性能流媒体服务器EasyDSS前端重构(一 ...

  9. luogu P6224 [BJWC2014]数据 KD-tree 标准板子 重构+二维平面内最近最远距离查询

    LINK:数据 这是一个我写过的最标准的板子. 重构什么的写的非常的标准 常数应该也算很小的. 不过虽然过了题 我也不知道代码是否真的无误 反正我已经眼查三遍了... 重构:建议先插入 插入过程中找到 ...

随机推荐

  1. 11.JAVA-Object类之finalize(),clone(),toString()等方法覆写

    1.Object介绍 Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过向上转型的方法使用 ...

  2. hihocoder1822 战舰日常任务

    思路: 使用堆即可. 实现: #include <iostream> #include <map> #include <vector> #include <c ...

  3. MapWindowsPoints函数使用

    MapWindowPoints的百度解释: 函数功能:该函数把相对于一个窗口的坐标空间的一组点映射成相对于另一窗口的坐标空 的一组点.   函数原型:int MapWindowPoints(HWND ...

  4. Open edX 配置 O365 SMTP

    配置LMS/Studio SMTP: 用到的文件如下:以下设置采用的root用户进行 /edx/app/edxapp/lms.env.json #|env文件 里包含一些功能开关 /edx/app/e ...

  5. iis的网站发布

    1.打开IIS服务器,添加“新网站”,命名网站的名称.物理路径(存放index.aspx的文件路径).ip地址和端口:2.在已经添加的网站,启用“目录浏览”,“默认文档”设置将要打开的网页 注:(1) ...

  6. 学习python报错处理

    1.如图所示 原因是因为没有安装火狐浏览器驱动. 解决办法:1.下载火狐浏览器驱动https://github.com/mozilla/geckodriver/releases 2.安装包解压后安装在 ...

  7. 新萝卜家园GHOST WIN7系统3专业装机版

    系统来自系统妈:http://www.xitongma.com/ 系统概述 萝卜家园GHOST win7 64位装机旗舰版加快“网上邻居”共享速度:取消不需要的网络服务组件,系统支持Windows安装 ...

  8. 关闭windows7/8的自动升级到windows10

    办公室的电脑已经有好几台自动升级到windows10了. 由于用着很不习惯都要求改回windows7. 升级了就不支持退回去,只能是全部删除重新安装了,很是麻烦.但是也没有看到哪里有可以关闭自动升级的 ...

  9. codevs 1145 Hanoi双塔问题 2007年NOIP全国联赛普及组

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的 ...

  10. SQL还原数据库

    还原一个备份数据库的经历. 首先,手头上有工程文件及相应的数据库的备份. 步骤: 1.在工程文件里找到配置文件,我这个是在bin目录里找到config.ini 2.双击打开它,里面有一些数据库的相关信 ...