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

时间:2011-02-07 10:39:54

标签: c#

  

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

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

Private List<datatype> MethodName()
{
    Return List
}

作为IList

Private IList<datatype> MethodName()
{
    Return IList
}

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

5 个答案:

答案 0 :(得分:7)

  

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

     

如果你只是在内部使用它,你可能不在乎这么多,并且   使用List可能没问题。

阅读此问题的解决方案:Why is it considered bad to expose List<T>?

答案 1 :(得分:3)

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

答案 2 :(得分:3)

您无法返回IList - 您需要返回该界面的实现(即List)。当然,返回“列表”将满足返回IList的方法声明,因为List实现了IList

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:-3)

如果您只返回List。那么函数的调用者必须将返回值放入类List的实例中。

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

这是关于接收者实现列表的自由。