为什么C#编译器显式声明一个类型实现的所有接口?

C#编译器似乎明确地注意到它所有的接口及其基类的实现. CLI规范说这不是必需的.我看到一些其他的编译器没有明确的发布,似乎工作正常.有没有什么区别或理由C#这样做?

底层为C生成的MSIL为:

.class private auto ansi beforefieldinit B
       extends A
       implements IAdvanced,
                  ISimple

它不需要指定ISimple,因为A像IAdvanced一样实现它. C#代码:

interface ISimple {
    int Basic { get;  }
    int Zero { get;  }
}
interface IAdvanced : ISimple {
    string Major { get; }
}
class A : ISimple {
    int ISimple.Basic {
        get { return 1; }
    }
    int ISimple.Zero {
        get{ return 0;}
    }
}
class B : A, IAdvanced {
    string IAdvanced.Major {
        get { return "B"; }
    }
}
最佳答案
我不认为我们可以在这里知道任何明确的答案,除非我们有编译器开发人员下降.但是,我们可以猜测原因.它可能是:

>优化 – 也许它为JIT编译器节省了一些工作.
>为了可读性 – 使人眼睛更容易掌握当查看MSIL输出时实现的类型.
>因为这是暑期实习生如何实现的,因为它的工作正常,没有人会改变它,以防万一它打破了一些东西.

转载注明原文:为什么C#编译器显式声明一个类型实现的所有接口? - 代码日志