Kompilator C# wydaje się wyraźnie zauważyć wszystkie jego interfejsy i klasy podstawowe. Specyfikacje CLI mówią, że nie jest to konieczne. Widziałem niektóre inne kompilatory nie wyemitować tego wyraźnie i wydaje się, że działa dobrze. Czy jest jakaś różnica lub powód, że C# to robi?Dlaczego kompilator C# jawnie deklaruje wszystkie interfejsy implementowane przez typ?
MSIL, że C# na dole generuje dla B jest:
.class private auto ansi beforefieldinit B
extends A
implements IAdvanced,
ISimple
Nie powinno należy określić iSimple, bo realizuje go jak robi IAdvanced. C# Kod:
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"; }
}
}
IIRC, wszystko jest jasno określone w specyfikacji. Więc nie zgaduj tutaj. – leppie
Poszedłbym do drzwi numer trzy! ;-) – peSHIr
Tak, Partition II specyfikacji CLI sprawiają, że jest całkiem jasne, że nie jest wymagane. Nie widziałem, czy powiedział, że dodanie go faktycznie robi cokolwiek. – MichaelGG