比如在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>呢?
| |
|
|
回复人: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();
| |