Ja, in diesem Fall macht es keinen Unterschied. In einigen Fällen kann es Unterschied machen, wenn Sie eine Basisklasse verwenden, die bereits eine Schnittstelle implementiert, aber Sie möchten es explizit erneut implementieren - aber in diesem Fall gibt es keine Basisklasse (außer der impliziten object
) und es hätte sich genau so verhalten.
Im Gegensatz zu meinen Erinnerungen glaube ich nicht, gibt es einen Unterschied in der Art, wie die Klasse in Metadaten dargestellt wird, ob der Code explizit alle Schnittstellen deklariert oder nicht. Hier ein Beispiel:
interface IFoo {}
interface IBar : IFoo {}
class FooBar1 : IBar {}
class FooBar2 : IBar, IFoo {}
Sowohl ildasm und Reflector zeigt die gleichen Informationen für FooBar1
und FooBar2
... es zeigt beide Umsetzung IBar
und IFoo
.
Mit anderen Worten, wir können nicht sagen, ob der ursprüngliche Quellcode für List<T>
tatsächlich alle Schnittstellen angibt oder nicht. Vielleicht tut es das, vielleicht auch nicht - aber egal.
BEARBEITEN: Aus Gründen der Vollständigkeit habe ich auch die Fälle überprüft, in denen Sie zwei Schnittstellen mit einer anderen Schnittstelle erweitern. Ich finde auch keinen Unterschied in den Metadaten in diesem Fall. Ich bin mir sicher, dass ich mich an eine Situation erinnere, in der es offensichtlich war, aber ich kann sie jetzt nicht finden.
Also da gibt es keine Basisklasse. Es macht keinen Unterschied. Warum haben die Entwickler dann diese beiden Schnittstellen "wieder" geerbt? –
@Marco: Siehe meine bearbeitete Antwort. –
Verstanden. Vielen Dank. Das war schnell. –