我看到了一个类似的功能
public FuncA(string param1, IList<SqlParameter> sqlParamsList)
我想知道为什么作者使用 IList 而不是 List?哪一个更好?我知道它们之间的区别是一个是接口,另一个是类。所以我的最后一个问题是什么时候使用哪个?
多个类可以实现该IList
接口。如果您使用IList
,则接受任何实现IList
.
如果使用List
,则只能传递List
和派生类。
使用接口通常更可取,因为它使 API 对于调用者更加灵活。如果您的方法接受接口而不是具体实现,则调用者可以使用他们想要的任何类型(List
, Array
, ImmutableList
...),只要它实现了IList
.
我倾向于IList
在具体实现上使用接口参数,除非出于某种原因你绝对必须拥有具体List
参数。
通过使用IList
而不是List
,您的方法现在可以接受所有实现的集合类型IList
,这可能是也可能不是直接继承自的集合List
。 List
并且它的任何子类也实现IList
了,因此它们也将包含在您的方法可以使用的可用类型集中。在这种情况下使用IList
可以让您更加灵活。
此外,在单元测试场景中,IList
可能更容易模拟出来,具体取决于您要测试的内容以及模拟框架具有的功能。
使用接口优于具体类型,以允许调用者传入任何实现该接口的对象。
尤其是在公共方法中,这是一种很好的做法。