Компилятор C # явно указывает все интерфейсы, которые он реализует, и его базовые классы реализуют. Спецификации CLI говорят, что это не обязательно. Я видел, что некоторые другие компиляторы не генерируют это явно, и, кажется, работает нормально. Есть ли какая-либо разница или причина, по которой C # делает это?
MSIL, который C # внизу генерирует для B:
.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"; }
}
}