【发布时间】:2017-09-13 10:31:47
【问题描述】:
我知道在方法签名中声明接口类型而不是具体类型的好处。我们可以在这里找到很多解释,我不会列出它们,这不是我的问题的重点。
我的问题是关于 linq。为什么,当我们看到在 API 的方法签名中声明接口类型是一种更好的做法时,一些 linq 扩展方法正在返回具体类型?
例如:
-
ToList()返回List<>而不是IList<>。 -
ToDictionary()返回Dictionary<>而不是IDictionary<> - 等
我想知道,因为我打算用我自己的扩展 Enumerable 扩展方法,而当我记得 linq 声明具体实现时,我的好习惯告诉我声明接口类型。
那我该怎么办?声明具体类型还是接口类型?
【问题讨论】:
-
我敢说,接受最通用的类型以提供一些功能并返回可以返回的最专业的类型(不干扰可能的实现更改)实际上是一种很好的做法。
-
想象
ToList()将返回IList。在尝试修改返回的列表之前,您真的会为每个返回的 IList 检查IList.IsReadOnly吗?提示:如果它返回IList而没有更具体的合同,你应该这样做。