`

C#中List与IList的区别(转)

    博客分类:
  • C#
阅读更多
List<T>类:表示可通过索引访问的对象的强类型列表,提供用于对列表进行搜索、排序和操作的方法。

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

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

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

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

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

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]);

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

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

鼓励使用接口

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

实现接口分离的原则

不是看实际需要用的
分享到:
评论

相关推荐

    C#中List与IList的区别.,C#中List与IList的区别.,C#中List与IList的区别.

    在C#编程中,List和IList是两种常见的数据结构,它们都用于存储和管理对象的集合,但它们在概念和用途上有显著的差异。让我们深入探讨这两种类型的特性和区别。 首先,List是一个具体的类,它是.NET框架System....

    CSharp_List.zip_C# list_C#中list_C#中list的用法_C#怎么引用List_c# list

    在C#编程中,`List&lt;T&gt;`是.NET框架中常用的一种动态数组,它属于泛型集合,提供了丰富的功能,使得在处理一系列数据时更加灵活高效。`List&lt;T&gt;`类是`System.Collections.Generic`命名空间的一部分,它实现了`IList&lt;T&gt;`...

    IList和List的区别

    在这段代码中,我们创建了两个集合,一个是`List&lt;TestClass&gt;`,另一个是`IList&lt;TestClass&gt;`,但实际上是同一个`List&lt;TestClass&gt;`的实例。然后我们向这两个集合中添加了10000000个元素,并通过循环查找Id在1到1000...

    C# 解析json格式数据为IList

    在C#编程中,处理JSON数据是常见的任务,特别是在与Web服务交互或存储/检索配置信息时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。本文将深入...

    C#将List与xml互转_支持简单类型.rar

    这个压缩包"**C#将List与xml互转_支持简单类型.rar**"包含了一个示例文本文件"**C#将List与xml互转_支持简单类型.txt**"和一个可能用于测试的数据文件"**1.xls**"。 首先,让我们理解List和XML的基本概念。List是...

    IList排序(C#)

    总结起来,C#中对`IList&lt;T&gt;`排序通常涉及`Array.Sort()`、`List&lt;T&gt;.Sort()`、`Enumerable.OrderBy()`等方法,以及可能需要实现`IComparable&lt;T&gt;`或`IComparer&lt;T&gt;`接口。根据具体需求选择合适的方法,可以有效地对列表...

    C#中Ilist与list的区别小结

    在C#编程中,`IList&lt;T&gt;` 和 `List&lt;T&gt;` 都是非常常见的集合类型,它们在处理数据列表时有着不同的特性和用途。本文将详细阐述两者之间的主要区别,并给出在实际开发中如何选择和使用它们的建议。 首先,`IList&lt;T&gt;` ...

    C#的IList中的方法

    ### C#中的IList接口详解 #### 一、引言 在C#中,`IList`接口是.NET Framework集合框架的重要组成部分之一。它提供了一种灵活的方式来存储和操作对象集合,支持索引访问和迭代等功能。本文将详细介绍`IList`接口的...

    C# IList多字段排序

    在C#编程中,`IList&lt;T&gt;`是一个接口,它扩展了`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`,提供了对列表的动态数据操作能力,比如添加、删除和索引访问元素。`IList&lt;T&gt;`接口是许多集合类型的基接口,如`List&lt;T&gt;`。在实际...

    C#基础知识 IList泛型类

    IList是.NET Framework中System.Collections.Generic命名空间下的一个接口,它是List类的基接口。IList接口继承自ICollection和IEnumerable,并添加了一些额外的方法和属性,如Insert、RemoveAt等,使我们可以对列表...

    C#中IList&lt;T&gt;与List&lt;T&gt;的区别深入解析

    在C#编程中,`IList&lt;T&gt;`和`List&lt;T&gt;`是两个常见的泛型集合类,它们在使用上有显著的差异。本文将深入探讨这两个类的区别,并解释在何时选择使用它们。 首先,`IList&lt;T&gt;`是一个接口,它是`ICollection&lt;T&gt;`的子接口,...

    C#中IEnumerable、ICollection、IList、List之间的区别

    在C#编程语言中,`IEnumerable&lt;T&gt;`、`ICollection&lt;T&gt;`、`IList&lt;T&gt;`以及`List&lt;T&gt;`是四个常见的接口和类,它们都与集合操作密切相关,但各自具有不同的特性和用途。以下是对这些概念的详细解释: 1. **IEnumerable**...

    浅谈C#中ListT对象的深度拷贝问题

    一、List对象中的T是值类型的情况(int 类型等) 对于值类型的List直接用以下方法就可以复制: List&lt;T&gt; oldList = new List(); oldList.Add(..); List&lt;T&gt; newList = new List(oldList); 二、List对象中的T是引用...

    C# ObservableCollection与List

    在.NET框架中,C#提供了多种数据集合类用于存储和管理对象,其中`ObservableCollection`和`List&lt;T&gt;`是两种常见的类型。它们都是用于创建可变列表,但有着不同的应用场景和特性。 首先,我们来详细了解`List&lt;T&gt;`。`...

    Json与实体相互转换,支持IList泛型

    Json转换为实体;Json转换为IList;实体转换为Json;IList转换为Json;

    C# List绑定treeView

    在本篇文章中,我们将深入探讨如何使用C#中的List集合动态地绑定到TreeView控件上。这种方法在构建具有层级结构的应用程序时非常有用,尤其是在处理组织结构、文件系统或者任何类型的树状数据时。 ### 一、理解...

    ILIST添加操作去掉重复的名字

    在C#编程中,`IList&lt;T&gt;`是.NET框架中的一种接口,它是`IList`接口的泛型版本,提供了对列表数据的操作方法。当我们处理一个`IList&lt;T&gt;`对象时,有时候需要确保添加的元素不与现有元素重复,以保持列表的唯一性。这个...

    C# List用法详解

    C# List是一种泛型集合类,属于System.Collections.Generic命名空间,实现了IList、ICollection、IEnumerable、IList、ICollection、IEnumerable接口。List类是ArrayList类的泛型等效类,使用大小可按需动态增加的...

    C#查找列表中所有重复出现元素的方法

    首先,我们需要了解C#中的列表类型`List&lt;T&gt;`。`List&lt;T&gt;`是.NET框架提供的一个泛型类,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口,提供了动态数组的功能,允许我们方便地添加、删除和查找元素。...

Global site tag (gtag.js) - Google Analytics