接口可以相互继承,子接口可以有父接口的所有属性和方法
如ICollection:IEnumerable之后
ICollection接口应该就有IEnumerable的所有方法
但是有个接口IList:ICollection,IEnumerable
ICollection已经有了IEnumerable接口的属性和方法
所以应该只要这样声明就可以了IList:ICollection
而不用再加一个IEnumerable
还有CollectionBase:IList,ICollection也一样
不知道里面为什么要IList:ICollection,IEnumerable进行声明接口
还有CollectionBase:IList,ICollection这样的类

解决方案 »

  1.   

    虽然ICollection接口有IEnumerable的所有方法,但ICollection可能有不同与IEnumerable的新方法啊.那接口IList就继承了以上两个接口的所有方法啊,不知道对不对?
      

  2.   

    函数A支持需要一个参数IEnumerable,而函数B支持需要一个参数ICollection,这样你同时继承这两个接口就可以同时适应这两个类了。
      

  3.   

    还是不明白,CMIC(大象)能不能稍稍讲的再详细一点
    谢谢
      

  4.   

    CMIC(大象)的意思可能是说
    class A
    {
       Action(IEnumerable i1, ICollection i2) { ...}
    }
    但是A没有必要继承IEnumerable和ICollection呀我的理解是:
    IList:ICollection和
    IList:ICollection,IEnumerable的效果是一样的之所以写出后一种方式,是为了增加接口或类的易读性。继承了几套接口,使用者就能很明白的看出
    它实现了哪几套服务(一个接口就是宣示了一套服务),而不需要关心它的父类继承了那些接口仔细观察一下System.collections的层次结构就可以看出来。
      

  5.   

    IList:ICollection,IEnumerable
    为了IList使用显式接口实现IEnumerable
    好处其一是代码简洁,其二是给你看个例子
    http://community.csdn.net/Expert/TopicView.asp?id=4010601
    显式接口是factory模式很好地实现,他能间接实现函数基于返回值的重载
      

  6.   

    呵呵 其实只为了方便转换
    IList:ICollection,IEnumerable
    可以转换为ICollection,IEnumerable
    就这么简单