我看到了像
这样的功能public FuncA(string param1, IList<SqlParameter> sqlParamsList)
我想知道为什么作者使用IList而不是List?哪一个更好?我知道它们之间的区别是一个是界面,另一个是类。所以我最后的问题是何时使用哪个?
答案 0 :(得分:10)
多个类可以实现IList
接口。如果您使用IList
,则接受任何实现IList
的类。
如果您使用List
,则只能传递List
和派生类。
答案 1 :(得分:2)
使用接口通常是首选,因为它使API对调用者更灵活。如果您的方法接受接口而不是具体实现,则调用者可以使用他们想要的任何类型(List
,Array
,ImmutableList
...),只要它实现{{ 1}}。
答案 2 :(得分:1)
使用接口优先于具体类型,以允许调用者传入实现接口的任何对象。
特别是在公共方法中,这是一种很好的做法。
答案 3 :(得分:1)
我倾向于在具体实现上使用IList
接口参数,除非有一些原因你绝对不能拥有具体的List
参数。
使用IList
代替List
,您的方法现在可以接受实现IList
的所有集合类型,这些集合类型可能是也可能不是直接从{{1}继承的集合}。 List
及其任何子类也实现List
,因此它们也将包含在您的方法可以使用的可用类型集中。在这种情况下使用IList
可以让您更灵活。
此外,在单元测试场景中,IList
可能更容易模拟,具体取决于您要测试的内容以及您的模拟框架的功能。