我在依赖Injecting a Controller的一个示例中找到了此方法。使用接口类型IList<>
而不是List<>
的原因是什么?
public IList<string> GetGenreNames()
{
var genres = from genre in storeDB.Genres
select genre.Name;
return genres.ToList();
}
由于
答案 0 :(得分:3)
实际的原因,你要问那个方法的原始程序员。
然而,我们可以提出一个似是而非的理由。
IEnumerable<int>
),则List<int>
优先于foreach
IEnumerable<int>
或int[]
),则不要返回只能枚举的集合(如List<int>
)。 这些指南列在互联网上的许多地方(尽管用不同的词语),可以帮助人们编写好的API。
IList<T>
优于List<T>
的原因是您要返回的集合可以是:
如果你要返回List<T>
,你实际上不会添加任何值,除了返回一个具体类型而不仅仅是任何类型,它实现了该接口。因此,最好返回接口而不是具体类型。你不会在外面丢失任何有用的功能,你仍然可以在将来用不同的东西替换返回的实际对象。
答案 1 :(得分:2)
定位界面总是比定位具体类型更好。
因此,如果返回IList,这意味着可以返回实现IList的任何内容,提供更好的分离。
查看更多信息
答案 2 :(得分:0)
这是OOP中的一些基本规则。拥有一个接口是很好的,所以你的客户端(GetGenreNames的调用者)只知道如何调用(函数签名,只记住,而不是实现细节等)来获得服务。
接口编程支持OOP的所有好东西。它更加普遍,保持关注点分离,更可重复使用。