C# コンパイラは、それが実装するすべてのインターフェイスとその基本クラスを明示的に記録しているようです。CLI の仕様によると、これは必要ありません。他のコンパイラがこれを明示的に出力しないのを見たことがありますが、うまく動作しているようです。C#がこれを行う違いや理由はありますか?
下部の C# が B に対して生成する MSIL は次のとおりです。
.class private auto ansi beforefieldinit B
extends A
implements IAdvanced,
ISimple
A は IAdvanced と同様に実装するため、ISimple を指定する必要はありません。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"; }
}
}