为什么它更好(返回IList而不是返回List)?

Cha*_*tha 14 c#

可能重复:
C# - List <T>或IList <T>

当我从我的方法返回一个列表时,我可以用两种方式完成.作为一个清单

Private List<datatype> MethodName()
{
    Return List
}
Run Code Online (Sandbox Code Playgroud)

作为一个IList

Private IList<datatype> MethodName()
{
    Return IList
}
Run Code Online (Sandbox Code Playgroud)

我听说我们应该把它作为IList归还.有人能解释为什么吗?

Sco*_*hic 7

如果您通过其他人将使用的库公开您的类,您通常希望通过接口而不是具体实现来公开它.如果您决定稍后更改类的实现以使用其他具体类,这将有所帮助.在这种情况下,您的库的用户将不需要更新他们的代码,因为接口不会更改.

如果你只是在内部使用它,你可能不在乎,使用List可能没问题.

阅读这个问题的解决方案:为什么公开List <T>被认为是不好的?


Dav*_*ale 6

您不能返回 an IList- 您需要返回该接口的实现(即 a List)。当然,返回 'List' 将满足您返回 aIList因为Listimplements 的方法声明IList

通常最佳做法是接受最通用类型的参数并返回最具体的. 然而,通常程序员往往不想将自己绑定到List实现并通常返回IList接口。IEnumerable如果您不希望调用者修改数组(.AsReadOnly()在您的 上调用扩展方法IList),您可能会返回。


Phi*_*ipp 3

它将接口与实现分开。对于调用者来说,如何实现结果对象并不重要,因此使用接口可以减少耦合。如果返回IList,则可以随时切换到不同的实现,而不会破坏调用者的代码。