Le compilateur C# semble noter explicitement toutes les interfaces et ses classes de base implémentent. Les spécifications CLI disent que ce n'est pas nécessaire. J'ai vu d'autres compilateurs ne pas l'exprimer explicitement, et cela semble fonctionner correctement. Y at-il une différence ou une raison pour laquelle le C# fait cela?Pourquoi le compilateur C# déclare-t-il explicitement toutes les interfaces implémentées par un type?
Le MSIL que le C# au fond génère B est:
.class private auto ansi beforefieldinit B
extends A
implements IAdvanced,
ISimple
Il ne devrait pas avoir besoin de spécifier ISimple, parce qu'elle met en œuvre A tout comme IAdvanced. C# Code:
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, tout est clairement défini dans la spécification. Donc, ne devinez pas ici. – leppie
J'irais pour la porte numéro trois! ;-) – peSHIr
Oui, la partition II des spécifications CLI indique clairement que ce n'est pas obligatoire. Je n'ai pas vu si il a dit que l'ajouter fait quelque chose cependant. – MichaelGG