2011-02-07 134 views

回答

2

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

4

如果您是通过其他人会使用, 你一般要通过接口而不是具体 实现揭露它库暴露你的类。如果您稍后决定更改类的 实现以使用不同的具体类,这将有所帮助。 在这种情况下,您的库的用户将不需要更新他们的代码 ,因为界面不会更改。

如果您只是在内部使用它,您可能不会太在意,并且使用List的 可能没问题。

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

+0

有时候你会在管理旧的答案时走远... – Scoregraphic 2014-11-28 11:16:31

-2

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

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

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

+1

这就是错的。如果您返回列表,接收者可以自由地将其作为List或IList接受。如果你返回IList,那么自由就消失了。 – Foxfire 2011-02-07 10:49:43

1

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

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

0

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

但是,当返回一个对象时,这通常没什么实际的关注。这在接受对象时更加相关(例如作为函数参数)。

相关问题