IEnumerable-Schnittstelle
-
10-07-2019 - |
Frage
Ich verstehe nicht, warum IList
IEnumerable
implementiert in Betracht zu ziehen, die IList
ICollection
implementiert, die IEnumerable
implementiert auch.
Lösung
Ich nehme an, Sie wollen wissen, warum erklärt er, dass es ICollection
sowie IEnumerable
implementiert, wenn die erste, die zweite bedeutet. Ich vermute, dass der Hauptgrund ist Klarheit: Es bedeutet, die Menschen müssen ICollection
zu nicht zurückblicken zu prüfen, ob das schon reicht IEnumerable
Es gibt auch andere Zeiten, in denen Sie eine Schnittstelle-Implementierung neu deklarieren müssen, wenn Sie eine Interface-Methode neu implementieren wollen, die vorher ausdrücklich in einer Basisklasse implementiert wurden - aber ich glaube nicht, das ist der Grund, in diesem Fall <. / p>
EDIT: Ich habe angenommen, dass der Quellcode, der die Dokumentation von gebaut werden beide Schnittstellen die Deklaration einschließlich hat. Eine weitere mögliche Alternative ist, dass alle Schnittstellen in der Hierarchie wird automatisch vom doc Generator eingezogen. In diesem Fall stellt sich die Frage: „Warum hat der Doc Generator tun.“ - und die Antwort ist fast sicher noch „Klarheit“
Andere Tipps
IList
nur implementiert IEnumerable
von Verbands; das heißt, es IEnumerable
genau weil implementiert es ICollection
erbt das ist IEnumerable
. Sie würden das gleiche mit Typhierarchien (auch wenn nur einfache Vererbung erhalten:
class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}
so List
ist ein Enumerable
; in gleicher Weise ist IList
IEnumerable
.
Zum Beispiel, wenn ich schreibe:
interface IA {}
interface IB : IA { }
interface IC : IB { }
Und bei den Metadaten suchen, dann scheint es, dass IC : IA, IB
- aber das ist nur indirekt; hier ist die IL:
.class private interface abstract auto ansi IA
{
}
.class private interface abstract auto ansi IB
implements IA
{
}
.class private interface abstract auto ansi IC
implements IB, IA
{
}
Wenn Sie den Code in ReSharper zu öffnen, wäre es die IEnumerable
Interface-Deklaration auf IList
zeigt, dass nicht erforderlich war, da sie bereits über ICollection
angegeben ist.