首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么C# (如ArrayList)中的集合类继承自多个接口,而这些接口中的一个继承自其余接口?

为什么C# (如ArrayList)中的集合类继承自多个接口,而这些接口中的一个继承自其余接口?
EN

Stack Overflow用户
提问于 2009-06-21 07:29:10
回答 6查看 3.4K关注 0票数 32

当我在ArrayList关键字上按f12以转到从vs2008生成的元数据时,我发现生成的类声明如下

代码语言:javascript
复制
public class ArrayList : IList, ICollection, IEnumerable, ICloneable

我知道IList已经从ICollection和IEnumerable继承了,那么为什么ArrayList要冗余地继承这些接口呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-21 08:19:39

好吧,我做了一些研究。如果您创建以下层次结构:

代码语言:javascript
复制
  public interface One
    {
        void DoIt();
    }

    public interface Two : One
    {
        void DoItMore();
    }

    public class Magic : Two
    { 
        public void DoItMore()
        {
            throw new NotImplementedException();
        }

        public void DoIt()
        {
            throw new NotImplementedException();
        }
    }

然后编译它,然后在不同的解决方案中引用DLL,输入Magic并按F12,您将得到以下结果:

代码语言:javascript
复制
 public class Magic : Two, One
    {
        public Magic();

        public void DoIt();
        public void DoItMore();
    }

您将看到接口层次结构是扁平的,还是编译器正在将接口添加到?如果你使用反射器,你也会得到同样的结果。

更新:如果您在ILDASM中打开DLL,您将看到它显示:

实现...Two

实现...One。

票数 14
EN

Stack Overflow用户

发布于 2009-06-21 07:38:02

显示额外的接口是因为它们是由IList隐含的。如果实现IList,还必须实现ICollection和IEnumerable。

票数 3
EN

Stack Overflow用户

发布于 2009-06-21 07:41:47

我只是猜测,但我认为实际上它只在代码中实现了IList,但文档也显示了其余的接口,以使其对使用该类的程序员来说是明确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1023375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档