Versuchen wir, mit / durch Logik über den Tellerrand hinaus zu denken und diese drei Schnittstellen in Ihrer Frage klar zu verstehen:
Wenn die Klasse einer Instanz die System.Collection.IEnumerable-Schnittstelle implementiert, können wir in einfachen Worten sagen, dass diese Instanz sowohl aufzählbar als auch iterierbar ist, was bedeutet, dass diese Instanz in einer einzelnen Schleife irgendwie zulässt, dass sie geht / get / pass / Durchlaufen / Durchlaufen aller Elemente und Elemente, die diese Instanz enthält.
Dies bedeutet, dass auf diese Weise auch alle in dieser Instanz enthaltenen Elemente und Elemente aufgelistet werden können.
Jede Klasse, die die System.Collection.IEnumerable-Schnittstelle implementiert, implementiert auch die GetEnumerator-Methode, die keine Argumente akzeptiert und eine System.Collections.IEnumerator-Instanz zurückgibt.
Instanzen der System.Collections.IEnumerator-Schnittstelle verhalten sich C ++ - Iteratoren sehr ähnlich.
Wenn die Klasse einer Instanz die System.Collection.ICollection-Schnittstelle implementiert, können wir in einfachen Worten sagen, dass diese Instanz eine Sammlung von Dingen ist.
Die generische Version dieser Schnittstelle, dh System.Collection.Generic.ICollection, ist informativer, da diese generische Schnittstelle explizit angibt, um welche Art von Dingen es sich in der Sammlung handelt.
Dies ist alles vernünftig, rational, logisch und macht Sinn, dass die System.Collections.ICollection-Schnittstelle von der System.Collections.IEnumerable-Schnittstelle erbt, da theoretisch jede Sammlung sowohl aufzählbar als auch iterierbar ist und dies theoretisch möglich ist, alle Elemente und Elemente zu durchlaufen in jeder Sammlung.
Die System.Collections.ICollection-Schnittstelle stellt eine endliche dynamische Sammlung dar, die geändert werden kann. Dies bedeutet, dass vorhandene Elemente aus der Sammlung entfernt und neue Elemente derselben Sammlung hinzugefügt werden können.
Dies erklärt, warum die System.Collections.ICollection-Schnittstelle über die Methoden "Hinzufügen" und "Entfernen" verfügt.
Da diese Instanzen der System.Collections.ICollection-Schnittstelle endliche Sammlungen sind, impliziert das Wort "endlich", dass jede Sammlung dieser Schnittstelle immer eine endliche Anzahl von Elementen und Elementen enthält.
Die Eigenschaft Count of System.Collections.ICollection-Schnittstelle setzt voraus, dass diese Nummer zurückgegeben wird.
Die System.Collections.IEnumerable-Schnittstelle verfügt nicht über diese Methoden und Eigenschaften wie die System.Collections.ICollection-Schnittstelle, da es keinen Sinn macht, dass System.Collections.IEnumerable über diese Methoden und Eigenschaften der System.Collections.ICollection-Schnittstelle verfügt.
Die Logik besagt auch, dass jede Instanz, die sowohl aufzählbar als auch iterierbar ist, nicht unbedingt eine Sammlung ist und nicht unbedingt geändert werden kann.
Wenn ich veränderbar sage, meine ich, dass Sie nicht sofort denken, dass Sie etwas hinzufügen oder entfernen können, das sowohl aufzählbar als auch iterierbar ist.
Wenn ich zum Beispiel nur eine endliche Folge von Primzahlen erstellt habe, ist diese endliche Folge von Primzahlen tatsächlich eine Instanz der System.Collections.IEnumerable-Schnittstelle, da ich jetzt alle Primzahlen in dieser endlichen Folge in einer einzigen Schleife durchgehen kann und mache, was ich mit jedem von ihnen machen will, wie jeden von ihnen auf das Konsolenfenster oder den Bildschirm zu drucken, aber diese endliche Folge von Primzahlen ist keine Instanz der System.Collections.ICollection-Schnittstelle, da dies für keinen Sinn macht Fügen Sie dieser endlichen Folge von Primzahlen zusammengesetzte Zahlen hinzu.
Außerdem möchten Sie in der nächsten Iteration die nächstnächere größere Primzahl zur aktuellen Primzahl in der aktuellen Iteration erhalten. Wenn ja, möchten Sie auch keine vorhandenen Primzahlen aus dieser endlichen Folge von Primzahlen entfernen.
Außerdem möchten Sie wahrscheinlich "Yield Return" in der GetEnumerator-Methode der System.Collections.IEnumerable-Schnittstelle verwenden, codieren und schreiben, um die Primzahlen zu erzeugen und nichts auf dem Speicherheap zuzuweisen, und dann den Garbage Collector (GC) beiden zuweisen Geben Sie die Zuordnung auf und geben Sie diesen Speicher vom Heap frei, da dies offensichtlich sowohl eine Verschwendung des Betriebssystemspeichers als auch eine Verringerung der Leistung darstellt.
Die dynamische Speicherzuweisung und Freigabe auf dem Heap sollte beim Aufrufen der Methoden und Eigenschaften der System.Collections.ICollection-Schnittstelle erfolgen, nicht jedoch beim Aufrufen der Methoden und Eigenschaften der System.Collections.IEnumerable-Schnittstelle (obwohl die System.Collections.IEnumerable-Schnittstelle nur über diese verfügt 1 Methode und 0 Eigenschaften).
Gemäß den Aussagen anderer auf dieser Stack Overflow-Webseite stellt die System.Collections.IList-Schnittstelle lediglich eine bestellbare Sammlung dar. Dies erklärt, warum die Methoden der System.Collections.IList-Schnittstelle im Gegensatz zu denen der System.Collections.ICollection-Schnittstelle mit Indizes arbeiten.
Kurz gesagt, die System.Collections.ICollection-Schnittstelle impliziert nicht, dass eine Instanz davon bestellbar ist, aber die System.Collections.IList-Schnittstelle impliziert dies.
Theoretisch geordnete Menge ist Sonderfall einer ungeordneten Menge.
Dies ist auch sinnvoll und erklärt, warum die System.Collections.IList-Schnittstelle die System.Collections.ICollection-Schnittstelle erbt.
List
Also , sollte das viel besser sein, ja?