何时使用IList或List

时间:2013-10-30 13:26:29

标签: c# list ilist

我看到了像

这样的功能
public FuncA(string param1, IList<SqlParameter> sqlParamsList)

我想知道为什么作者使用IList而不是List?哪一个更好?我知道它们之间的区别是一个是界面,另一个是类。所以我最后的问题是何时使用哪个?

4 个答案:

答案 0 :(得分:10)

多个类可以实现IList接口。如果您使用IList,则接受任何实现IList的类。

如果您使用List,则只能传递List和派生类。

答案 1 :(得分:2)

使用接口通常是首选,因为它使API对调用者更灵活。如果您的方法接受接口而不是具体实现,则调用者可以使用他们想要的任何类型(ListArrayImmutableList ...),只要它实现{{ 1}}。

答案 2 :(得分:1)

使用接口优先于具体类型,以允许调用者传入实现接口的任何对象。
特别是在公共方法中,这是一种很好的做法。

答案 3 :(得分:1)

我倾向于在具体实现上使用IList接口参数,除非有一些原因你绝对不能拥有具体的List参数。

使用IList代替List,您的方法现在可以接受实现IList的所有集合类型,这些集合类型可能是也可能不是直接从{{1}继承的集合}。 List及其任何子类也实现List,因此它们也将包含在您的方法可以使用的可用类型集中。在这种情况下使用IList可以让您更灵活。

此外,在单元测试场景中,IList可能更容易模拟,具体取决于您要测试的内容以及您的模拟框架的功能。