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"; }
}
}