比如在Category.cs中, //获取所有宠物种类 public IList GetCategories() //按id号获取单个宠物种类 public CategoryInfo GetCategory(string categoryId) 第一个方法返回的是实体 CategoryInfo的集合,为什么用的是IList,而不是List呢?



比如在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();