可能重复:
C# - List<T> or IList<T>
当我从我的方法返回一个列表时,我可以用两种方式做。 作为列表
Private List<datatype> MethodName()
{
Return List
}
作为IList
Private IList<datatype> MethodName()
{
Return IList
}
我听说我们应该把它作为IList归还。有人能解释为什么吗?
答案 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时,调用者可以将其放入实现该接口的任何实例中。假设调用者已经创建了一个支持某种时髦排序的实现,或者他们已经创建了一个直接将列表映射到数据库表的实现。
这是关于接收者实现列表的自由。