Eine Sammlung, die eine Menge von Objekten darstellt, die durch Durchlaufen jedes Elements zugänglich sind (insbesondere kann sie mit foreach-Schleife erreicht werden) Eine Sammlung enthält mehrere Elemente, d. h. es gibt ein Sammlungsklassenobjekt und N Elementobjekte
Da jede Collection-Klasse die IEnumerable-Schnittstelle implementiert, besitzt jedes Collection-Class-Objekt eine GetEnumerator()-Methode, die ein Objekt zurückgeben kann, das die IEnumerator-Schnittstelle implementiert, die weder ein Collection-Class-Objekt noch ein Collection-Element-Klassenobjekt ist, sondern ein unabhängiges Klassenobjekt. Dieses Objekt erlaubt es, jedes Elementobjekt im Collection-Class-Objekt zu iterieren
Handelt es sich um eine benutzerdefinierte Collection-Klasse, muss der Benutzer seine GetEnumerator()-Methode implementieren, andernfalls können keine Schleifen verwendet werden. Natürlich muss auch die IEnumerator-Klasse, die dieser benutzerdefinierten Collection-Klasse entspricht (die Klasse, die die Schnittstelle implementiert), angepasst werden
Zum Beispiel ist der IEnumerator, der der ArrayList-Sammelklasse entspricht, ArrayListEnumeratorSimple Der IEnumerator, der der Array-Sammlungsklasse entspricht, ist SZArrayEnumerator (Keine der beiden Klassen ist in der .NET Framework Class Library Dokumentation (MSDN) behandelt.)
1. Die Schnittstellen in System. Kolloktionen, die das Verhalten der Sammlung repräsentieren, sind: 1) ICollection Definieren Sie die Größe, Anzahl der Enume und Synchronisationsmethoden für alle Sammlungen. Abgeleitet von IEnumerable Es definiert das grundlegendste Verhalten der Collection-Klasse, und alle Collection-Klassen implementieren diese Schnittstelle (Basis-Interface) Aber sein Verhalten ist zu einfach: Es handelt sich hauptsächlich um eine Count-Eigenschaft, und es macht wenig Sinn, sie allein zu implementieren
2) IEnumerable Stellen Sie eine Aufzählung frei, die einfache Iterationen auf einer Menge unterstützt Es gibt nur eine Methode, GetEnumerator(), die eine IEnumerator-Schnittstelle zurückgibt, über die sie die Sammlung durchlaufen kann Im Grunde implementieren alle Collection-Klassen diese Schnittstelle
3) IList Die IList-Implementierung ist eine Sammlung von Werten, die sortierbar sind und nach Index für ihre Mitglieder zugänglich sind; sie implementiert selbst die ICollection- und IEnumerable-Schnittstellen ist die abstrakte Basisklasse für alle Listen. Es gibt drei Kategorien von IList-Implementierungen: schreibgeschützt, feste Größe und variable Größe.
4) IDictionary Die IDictionary-Implementierung ist eine Sammlung von Schlüssel-/Wertpaaren, die selbst die ICollection- und IEnumerable-Schnittstellen implementiert ist die Basisschnittstelle einer Sammlung von Schlüssel-/Wertpaaren. Es gibt drei Kategorien von IDictionary-Implementierungen: Nur-lese-, Festgröße- und Variable-Größen-Implementierungen. IDictionary kann als Wörterbuch, Abbildung oder Shash-Liste bezeichnet werden und greift auf Werte basierend auf Schlüsseln (beliebiger Art) zu.
2. Die Collection-Klassen, die direkt in System.Collections verwendet werden können, sind: 1) ArrayList Implementiere Schnittstellen: IList, ICollection, IEnumerable Solange die Sammlung nicht verändert wird, kann ArrayList sicher mehrere Leser gleichzeitig unterstützen Wenn Elemente zur ArrayList hinzugefügt werden, wird die Kapazität automatisch bei Bedarf durch Umverteilung erhöht (2-fache Erhöhung) Wenn du ein Array von Objekten erstellen musst, aber die Größe des Arrays vorher nicht kennst, kannst du ArrayList verwenden ArrayList bezeichnet alle Elemente als Objekte, daher muss sie beim Zugriff auf Elemente in ArrayList typisiert werden Vorteile: Dynamische Änderung der Größe, flexibles und bequemes Einfügen und Entfernen von Elementen, Sortierbarkeit Nachteile: Die Einsetzleistung ist nicht so gut wie bei Arrays, nicht bei starken Typen
2) BitArray Schnittstellen implementieren: ICollection und IEnumerable Verwalten Sie komprimierte Arrays von Bitwerten.
3) Hashtabelle Schnittstellen implementieren: IDictionary, ICollection, IEnumerable Man kann Elemente frei zur Hashtable hinzufügen oder entfernen, einige wie ArrayList, aber ohne den Performance-Overhead
4) SortedList Schnittstellen implementieren: IDictionary, ICollection, IEnumerable SortedLIst vereint die Vorteile von ArrayList und Hashtable und kann nach Schlüsselwert sortiert werden
5) Warteschlange Schnittstellen implementieren: ICollection und IEnumerable Queques sind Warteschlangen, First-in, First-Out-Zugang zu einzelnen Elementen Sie können die GetEnumerator()-Methode des Queque-Objekts aufrufen, um das IEnumerator-Objekt durch die Elemente in der Warteschlange zu bringen
6) Stapel Schnittstellen implementieren: ICollection und IEnumerable Ein Stack ist ein Stack, der einzelne Elemente auf der Last-in-First-Out-Basis zugreift Du kannst die GetEnumerator()-Methode des Stack-Objekts aufrufen, damit das IEnumerator-Objekt durch die Elemente im Stack iteriert
3. Die oben genannten Sammlungsklassen sind alle allgemeine Sammlungsklassen, und die meisten Elemente, die sie akzeptieren, gehören zum Objekt-Typ, wenn das Objekt eingefügt wird Nach der Sammlung geht die ursprüngliche Typinformation verloren – das heißt, diese allgemeinen Sammlungsklassen sind nicht stark typisiert Der Workaround besteht darin, stark typisierte Collection-Klassen zu verwenden System.Collections-Namensraum System.Collections.Spezialisierter Namensraum Einige Klassen können die Anforderungen erfüllen und direkt oder vererbt verwendet werden
|