最近看了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,是不是有些多余呢???望牛人明示!!!
这个我记得最早有人向MS开发人员提问过,答案就是为了增加可读性,这样程序员可以清晰的知道新的类或者接口都实现了那些约束(接口)。
哦
如果需要同时支持IList, ICollection, IEnumerable接口的话,我们只需要继承抽象类CollectionBase即可!方便用户选择继承!!
个人意见,这样来继承的话,更让用户明确,是去继承Ilist接口中的某个接口方法还是直接去继承ICollection或者IEnumerable中的某个方法。而不应该完全是简单的为了增加可读性,仅为个人认识理解啊,有不对的地方希望可以和大家一起讨论。
增加可读性,层次更鲜明,把一个实现链给写出了
ICollection是接口,Ilist继承了并实现了,并不等于collectionbase也继承并实现了。必须要实现了ICollection才行的