Oui, cela ne fait aucune différence dans ce cas. Dans certains cas peut faire la différence, si vous utilisez une classe de base qui implémente déjà une interface mais que vous souhaitez la réimplémenter vous-même explicitement - mais dans ce cas il n'y a pas de classe de base (autre que la object
implicite) se serait comporté exactement de la même manière. Contrairement à mes souvenirs, je ne crois pas qu'il y ait une différence dans la façon dont la classe est représentée dans les métadonnées, que le code déclare explicitement toutes les interfaces ou non. Voici un exemple:
interface IFoo {}
interface IBar : IFoo {}
class FooBar1 : IBar {}
class FooBar2 : IBar, IFoo {}
Les deux ildasm et réflecteur montrent les mêmes informations pour FooBar1
et FooBar2
... il montre à la fois de les mettre en œuvre IBar
et IFoo
. En d'autres termes, nous ne pouvons pas dire si le code source original pour List<T>
spécifie ou non toutes les interfaces. Peut-être que oui, peut-être que non, mais cela n'a pas d'importance.
EDIT: Pour être complet, j'ai également vérifié les cas où vous étendez deux interfaces avec une autre interface. Je ne peux pas non plus trouver de différence dans les métadonnées dans ce cas-là. Je suis sûr que je me souviens d'une situation dans laquelle il était évident, mais je ne peux pas le trouver maintenant.
Donc, puisqu'il n'y a pas de classe de base. Cela ne fait pas de différence. Alors pourquoi les développeurs ont hérité de ces deux interfaces "à nouveau"? –
@Marco: Voir ma version modifiée. –
J'ai compris. Merci beaucoup. C'était rapide. –