0

我看到了一个类似的功能

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

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

4

4 回答 4

10

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

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

于 2013-10-30T13:28:18.133 回答
2

使用接口通常更可取,因为它使 API 对于调用者更加灵活。如果您的方法接受接口而不是具体实现,则调用者可以使用他们想要的任何类型(List, Array, ImmutableList...),只要它实现了IList.

于 2013-10-30T13:28:22.340 回答
1

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

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

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

于 2013-10-30T13:31:46.880 回答
1

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

于 2013-10-30T13:28:59.250 回答