关于IList和List

时间:2022-09-10 23:48:05
想请问一下大家IList<T>和List<T>在实际编程中如何使用,我只知道前者是一个泛型接口,后者是一个泛型类。

public IList<Friends> findFriends()
{
List<Friends> entities = new List<Friends>();
.....

return entities;
}

如上代码片段我想知道这样定义函数就是所谓的Design to interface的思想吗?

如果改成全部使用List<T>不用IList<T>这样有什么不好

public List<Friends> findFriends()
{
List<Friends> entities = new List<Friends>();
.....

return entities;
}


谢谢各位!

15 个解决方案

#1


个人感觉差不多,当然IList更通用一些

#2


IList是一个泛型的接口
List 比IList拥有更多的方法
如果仅用来做数据集合 用IList 就行
如果还需要更多的对集合进行操作,用List

#3


list只是实现ilist的方法

#4


麻烦能不能结合上面的代码片段简单说明一下,为什么要把函数定义成返回接口

#5


帮顶,学习

#6


泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,如下所示:

// Declare the generic class
public class GenericList<T>
{
    void Add(T input) { }
}
class TestGenericList
{
    private class ExampleClass { }
    static void Main()
    {
        // Declare a list of type int
        GenericList<int> list1 = new GenericList<int>();

        // Declare a list of type string
        GenericList<string> list2 = new GenericList<string>();

        // Declare a list of type ExampleClass
        GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
    }
}

#7


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


//方法1:
public class MyCollection1:List<MyItem>
{
    public new void Add(MyItem item)
    {
        if(this.Contains(item)) return;
        base.Add(item);
    }
}
//方法1:
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方法,实现即可,实现方法略
}



er。。。
看的出区别么?如果是从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]);


---------------------------------------引用某个网友的话,看的懂就看,看不懂当我没说。

#8


至于接口和类么。
可能是为了面向对象,我们要面向接口编程,就写了接口。但担心大家不会用。就写了类,实现接口。你要是就那个类就够用了。就算了。如果不够用,那就组合几个接口,实现出来。

#9


IList<T>在编程中体现的好处到底是什么呢,假设T是个类类型的话,那直接用T定义对象也可以啊,那优点体现在哪里呢,

#10


学习,帮顶

#11


接口的主要作用 应该是实现多态吧

#12


引用楼主 yqw945 的帖子:
想请问一下大家IList <T>和List <T>在实际编程中如何使用,我只知道前者是一个泛型接口,后者是一个泛型类。 

C# code
public IList<Friends> findFriends()
{
List<Friends> entities = new List<Friends>();
.....

return entities;
}



如上代码片段我想知道这样定义函数就是所谓的Design to interface的思想吗? 

如果改成全部使用List <T>不用IList <T>这样有什么不好 

C# code
public List<Friends…


第一段代码:以IList<T>接口的形式返回结果;
第二段代码:返回的是类List<T>的实例;虽然也实现了IList<T>接口。//看看接口和类的区别吧;

#13


学习下

#14


???

#15


路过 看那看有帮助

#1


个人感觉差不多,当然IList更通用一些

#2


IList是一个泛型的接口
List 比IList拥有更多的方法
如果仅用来做数据集合 用IList 就行
如果还需要更多的对集合进行操作,用List

#3


list只是实现ilist的方法

#4


麻烦能不能结合上面的代码片段简单说明一下,为什么要把函数定义成返回接口

#5


帮顶,学习

#6


泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险,如下所示:

// Declare the generic class
public class GenericList<T>
{
    void Add(T input) { }
}
class TestGenericList
{
    private class ExampleClass { }
    static void Main()
    {
        // Declare a list of type int
        GenericList<int> list1 = new GenericList<int>();

        // Declare a list of type string
        GenericList<string> list2 = new GenericList<string>();

        // Declare a list of type ExampleClass
        GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
    }
}

#7


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


//方法1:
public class MyCollection1:List<MyItem>
{
    public new void Add(MyItem item)
    {
        if(this.Contains(item)) return;
        base.Add(item);
    }
}
//方法1:
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方法,实现即可,实现方法略
}



er。。。
看的出区别么?如果是从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]);


---------------------------------------引用某个网友的话,看的懂就看,看不懂当我没说。

#8


至于接口和类么。
可能是为了面向对象,我们要面向接口编程,就写了接口。但担心大家不会用。就写了类,实现接口。你要是就那个类就够用了。就算了。如果不够用,那就组合几个接口,实现出来。

#9


IList<T>在编程中体现的好处到底是什么呢,假设T是个类类型的话,那直接用T定义对象也可以啊,那优点体现在哪里呢,

#10


学习,帮顶

#11


接口的主要作用 应该是实现多态吧

#12


引用楼主 yqw945 的帖子:
想请问一下大家IList <T>和List <T>在实际编程中如何使用,我只知道前者是一个泛型接口,后者是一个泛型类。 

C# code
public IList<Friends> findFriends()
{
List<Friends> entities = new List<Friends>();
.....

return entities;
}



如上代码片段我想知道这样定义函数就是所谓的Design to interface的思想吗? 

如果改成全部使用List <T>不用IList <T>这样有什么不好 

C# code
public List<Friends…


第一段代码:以IList<T>接口的形式返回结果;
第二段代码:返回的是类List<T>的实例;虽然也实现了IList<T>接口。//看看接口和类的区别吧;

#13


学习下

#14


???

#15


路过 看那看有帮助