繁体   English   中英

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

[英]What does return type of ICollection<Person> mean?

我正在查看Entity Framework 4的一些代码示例,作者创建了一个返回ICollection <Person>的方法。 我知道ICollection是一个接口。 我知道Person是集合中的对象类型。 我知道我正在收回一些人物。

这个问题。 为什么选择ICollection? 为什么不列出<>? 为什么这样使用接口? 我已经将接口用作类的“蓝图”,指定了所需的成员,但我并不真正理解这里的用法。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM