Il compilatore C# sembra notare tutte le interfacce e le sue classi base implementano. Le specifiche CLI dicono che questo non è necessario. Ho visto alcuni altri compilatori non emetterlo esplicitamente, e sembra funzionare bene. C'è qualche differenza o ragione nel C#?Perché il compilatore C# dichiara esplicitamente tutte le interfacce di un tipo implementate?
Il MSIL che il C# in fondo genera per la B è:
.class private auto ansi beforefieldinit B
extends A
implements IAdvanced,
ISimple
Non dovrebbe essere necessario specificare ISimple, perché A implementa come fa IAdvanced. Codice 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"; }
}
}
IIRC, tutto è chiaramente definito nelle specifiche. Quindi non indovinare qui. – leppie
Andrei per la porta numero tre! ;-) – peSHIr
Sì, la partizione II delle specifiche CLI chiarisce che non è richiesta. Non ho visto se dicesse che aggiungerlo in realtà fa qualcosa comunque. – MichaelGG