关于C#:为什么返回ilist比list更好


Why its better (Return IList Instead of return List)?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C# - List or IList

当我从我的方法中返回一个列表时,我可以用两种方式来做。作为清单

1
2
3
4
Private List<datatype> MethodName()
{
    Return List
}

作为ILIST

1
2
3
4
Private IList<datatype> MethodName()
{
    Return IList
}

我听说我们应该把它作为一个伊利斯特人归还。有人能解释为什么吗?


If you are exposing your class through a library that others will use,
you generally want to expose it via interfaces rather than concrete
implementations. This will help if you decide to change the
implementation of your class later to use a different concrete class.
In that case the users of your library won't need to update their code
since the interface doesn't change.

If you are just using it internally, you may not care so much, and
using List may be ok.

阅读此问题的解决方案:为什么公开列表被认为是不好的?


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


您不能返回IList—您需要返回该接口的实现(即List)。当然,返回"list"将满足返回IList的方法声明,因为List实现IList

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


返回接口允许您稍后更改实现,从而减少耦合。

然而,当返回一个物体时,这通常是很少有实际意义的。这在接受对象(例如作为函数参数)时更为相关。


如果你以列表的形式返回。然后,函数的调用者必须将返回放到类列表的实例中。

当您返回一个IList时,调用方可以将它放入实现该接口的任何对象的实例中。假设调用者已经做了一个支持某种奇怪排序的实现,或者他们已经做了一个将列表直接映射到数据库表的实现。

这是关于接收者可以自由执行列表的问题。