ICollection <person>的返回类型是什么意思?</person>

时间:2010-09-10 17:17:22

标签: c# .net interface

我正在查看Entity Framework 4的一些代码示例,并且作者创建了一个返回ICollection&lt; Person&gt;的方法。我知道ICollection是一个接口。我知道Person是集合中的对象类型。我知道我正在收回一批人员。

问题。为什么选择ICollection?为什么不列出&lt;&gt;?为什么这样使用接口?我已经使用接口作为类的“蓝图”,指定了所需的成员,但我真的不明白这里的用法。

3 个答案:

答案 0 :(得分:12)

在公共API中返回接口而不是具体类通常会更好。

这允许实现稍后更改。例如,它实际上可能正在返回List<T>。然而,稍后,可以进行优化以返回可以具有更好的存储器效率,允许流传输或许多其他优点之一的不同类型的集合。只要该类仍然实现ICollection<T>,该实现可以自由切换而不会导致API更改。

答案 1 :(得分:0)

GoF Design Patterns书的一个关键点是编程到接口,而不是实现。其原因是它提供的自由。通过返回接口而不是特定类型,将来可以更容易地更改实现,而不会影响调用代码。

答案 2 :(得分:0)

除非您的用户想要您,否则您的API应尽可能少地公开实现细节,在这种情况下,使用List<Person>是实现细节。例如,如果您或您的用户知道他们想要按索引访问结果集,那么可能最好返回IList<Person>而不是ICollection<Person>,但如果您不确定用户方案,则应该公开最多尽可能基础抽象(即在这种情况下可能IEnumerable<Person>就足够了。)

请记住,如果最近你决定使用更多派生的返回类型,它不会破坏任何现有的客户端,但你不能使用更多的返回类型而不会破坏其中的一些。