ILIST类型的使用问题(收集) dodo

比如在Category.cs中,
//获取所有宠物种类
public IList<CategoryInfo> GetCategories()
//按id号获取单个宠物种类
public CategoryInfo GetCategory(string categoryId)
第一个方法返回的是实体 CategoryInfo的集合,为什么用的是IList<CategoryInfo>,而不是List<CategoryInfo>呢?
回复人:ristona(一箭) ( 二级(初级)) 信誉:98 2007-3-9 21:40:26 得分:0
?

这是考虑开发可复用性代码,叫做依赖倒转原则。
Top
回复人:syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*) ( 两星(中级)) 信誉:95 2007-3-9 22:54:45 得分:0
?

面向接口编程。

如果.Net 3.0或4.0,5.0里面,List可能产生一些变化,但是IList却不太可能变化(因为只是个接口,实现又不在这里,变化个接口意义不太大,就算这个接口不合理也是新加一个接口不会去改接口的),这只是一个简单的例子而已。

返回一个IList给了使用上更多灵活性,这个才是更重要的。
Top
回复人:sp1234(遭遇 Adware.CPush 流氓) ( 四星(高级)) 信誉:98 2007-3-9 22:57:06 得分:0
?

基本上,IList<T>与List<T>类型的接口功能是完全一样的。

.net不支持多重继承。那么使用IList<T>就能够适应更多的类型,包括不是从List<T>继承的类型。

不过,实际上使用Interface编程是非常令人痛苦的。因此,一般人返回一个这种集合的时候十有八九会从List<T>继承,而不会让自定义的集合仅实现IList<T>。好在List<T>也是IList<T>,所以使用IList<T>完全可以隐藏这种乱七八糟的选择。

综合起来看,IList<T>很难用,但是灵活。
Top
回复人:Ivony(授人以鱼不如授人以渔,上海谋生) ( 两星(中级)) 信誉:100 2007-3-11 6:49:59 得分:0
?

我觉得是最小使用原则,如果接受者并不需要具体的容器,而只需要一个可以被当作容器的“东西”,这个时候就不必返回一个具体的容器。

另一个方面也是从语义上来说,IList强调我返回一个容器,List强调我返回一个特定的容器。

面向接口编程不能生搬硬套,要不然也会很痛苦。


最后说明ArrayList和LinkedList等都实现了IList的接口
你可以声明一个IList类型的变量,使之指向ArrayList或者LinkedList
IList list = new ArrayList();
IList list = new LinkedList();
原文地址:https://www.cnblogs.com/zgqys1980/p/876043.html