日期:2014-05-18  浏览次数:20796 次

关于IList<T>和List<T>
想请问一下大家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> findFriends()
{
List<Friends> entities = new List<Friends>();
.....

return entities;
}



谢谢各位!

------解决方案--------------------
个人感觉差不多,当然IList更通用一些
------解决方案--------------------
IList是一个泛型的接口
List 比IList拥有更多的方法
如果仅用来做数据集合 用IList 就行
如果还需要更多的对集合进行操作,用List
------解决方案--------------------
list只是实现ilist的方法
------解决方案--------------------
泛型是 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>();
}
}

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

C# code

//方法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方法,实现即可,实现方法略
}

------解决方案--------------------
引用楼主 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…