C#中到底有没有接口继承接口这个概念?

public interface IEnumerable
public interface ICollection : IEnumerable
public interface IList : ICollection, IEnumerable

看上面的代码,这格式F12跳入metadata元数据中看到的定义
为什么IList不直接写

public interface IList : ICollection

到底有没有接口继承接口这个概念?
我尝试了下:

public interface IA
{
    void a();
}
public interface IB : IA
{
    void b();
}
public interface IC : IB
{
    void c();
}
public class Hello : IC
{
    public void a() { }
    public void b() { }
    public void c() { }
}

然后编译出来,编译器居然帮我们加上了IA

clipboard.png

那到底实际上底层是接口有继承接口的概念的吗,还是说没有,编译器帮我们加上,让我们错以为是有这个概念,原本就继承的东西没理由帮我们还多此一举的加上

阅读 7.6k
2 个回答

编译器这么做应该是为了执行的时候更快速(这样就不需要再找IB继承过什么接口了),语法有时候就是一些包装,只是方便程序编写,为了性能,编译器当然会做一些优化(个人是这么理解的)

当然有继承接口的概念。IC: IB, IA只是“这样写也不认为错”,正常情况下只需要写IC: IB就够了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进