C#编译器似乎明确地记下了它的所有接口,并且它的基类实现了。 CLI规范说这不是必要的。我已经看到其他一些编译器没有明确地发出它,它似乎工作正常。 C#是否存在差异或原因?
底部的C#为B生成的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"; }
}
}
答案 0 :(得分:8)
我不认为我们可以在这里知道任何明确的答案,除非我们让编译器开发人员介入。但是,我们可以猜测原因。它可能是: