何时使用 IList 或 List

本文关键字:List IList 何时使 | 更新日期: 2023-09-27 18:37:24

我看到了一个像这样的函数

public FuncA(string param1, IList<SqlParameter> sqlParamsList)

我想知道为什么作者使用 IList 而不是列表?哪一个更好?我知道它们之间的区别在于一个是接口,另一个是类。所以我的最后一个问题是什么时候使用哪个?

何时使用 IList 或 List

多个

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

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

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

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

我倾向于在具体实现中使用IList接口参数,除非有某种原因你绝对必须拥有具体的List参数。

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

此外,在单元测试方案中,IList可能更容易模拟,具体取决于您尝试测试的内容以及模拟框架具有哪些功能。