C#编译器似乎明确地记下了它的所有接口,并且它的基类实现了.CLI规范说这不是必要的.我已经看到其他一些编译器没有明确地发出它,它似乎工作正常.C#是否有这样的差异或原因?
底部的C#为B生成的MSIL是:
.class private auto ansi beforefieldinit B
extends A
implements IAdvanced,
ISimple
Run Code Online (Sandbox Code Playgroud)
它不需要指定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"; }
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为我们可以在这里知道任何确定的答案,除非我们让编译器开发人员介入.但是,我们可以猜测原因.它可能是: