首页 新闻 会员 周边 捐助

关于接口继承的疑问!!!

0
悬赏园豆:10 [已解决问题] 解决于 2010-03-07 13:07

最近看了FCL中的CollectionBase

代码
namespace System.Collections
{
// 摘要:
// 为强类型集合提供 abstract 基类。
[Serializable]
[ComVisible(
true)]
public abstract class CollectionBase : IList, ICollection, IEnumerable
{
.......
}
}

问题是既然IList多重继承了ICollection,IEnumerable

namespace System.Collections
{
// 摘要:
// 表示可按照索引单独访问的对象的非泛型集合。
[ComVisible(true)]
public interface IList : ICollection, IEnumerable
{
....
}
}

那么CollectionBase,为什么还要多重继承ICollection, IEnumerable,是不是有些多余呢???望牛人明示!!!

ForFreeDom的主页 ForFreeDom | 小虾三级 | 园豆:589
提问于:2010-03-05 22:18
< >
分享
最佳答案
0

这个我记得最早有人向MS开发人员提问过,答案就是为了增加可读性,这样程序员可以清晰的知道新的类或者接口都实现了那些约束(接口)。

收获园豆:4
chameleon | 菜鸟二级 |园豆:311 | 2010-03-05 23:09
其他回答(5)
0

vons | 园豆:1033 (小虾三级) | 2010-03-05 23:07
0

如果需要同时支持IList, ICollection, IEnumerable接口的话,我们只需要继承抽象类CollectionBase即可!方便用户选择继承!!

收获园豆:4
langford | 园豆:710 (小虾三级) | 2010-03-05 23:45
0

个人意见,这样来继承的话,更让用户明确,是去继承Ilist接口中的某个接口方法还是直接去继承ICollection或者IEnumerable中的某个方法。而不应该完全是简单的为了增加可读性,仅为个人认识理解啊,有不对的地方希望可以和大家一起讨论。

收获园豆:2
西越泽 | 园豆:10775 (专家六级) | 2010-03-06 00:15
0

增加可读性,层次更鲜明,把一个实现链给写出了

袁小山 | 园豆:210 (菜鸟二级) | 2010-03-06 10:05
0
ICollection是接口,Ilist继承了并实现了,并不等于collectionbase也继承并实现了。必须要实现了
ICollection才行的
persialee | 园豆:3217 (老鸟四级) | 2010-03-06 23:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册