Een collectie die een set objecten vertegenwoordigt die toegankelijk zijn door elk element te doorlopen (in het bijzonder kan het worden benaderd via foreach loop) Een collectie bevat meerdere elementen, dat wil zeggen dat er een collectieklasse-object en N elementobjecten zijn
Omdat elke verzamelingsklasse de IEnumerable-interface implementeert, heeft elk verzamelingsklasseobject een GetEnumerator()-methode, die een object kan teruggeven dat de IEnumerator-interface implementeert, die noch een verzamelingsklasseobject noch een verzamelelementklasseobject is, maar een onafhankelijk klasseobject. Dit object laat je door elk elementobject in het collectieklasse-object itereren
Als de verzamelingsklasse een door de gebruiker gedefinieerde verzamelklasse is, moet de gebruiker zijn GetEnumerator()-methode implementeren, anders kunnen lussen niet worden gebruikt. Natuurlijk moet ook de IEnumerator-klasse die bij deze custom collection-klasse hoort (de klasse die de interface implementeert) worden aangepast
Bijvoorbeeld, de IEnumerator die overeenkomt met de ArrayList-verzamelklasse is ArrayListEnumeratorSimple De IEnumerator die overeenkomt met de Array-verzamelingsklasse is SZArrayEnumerator (Geen van beide klassen wordt behandeld in de .NET Framework Class Library-documentatie (MSDN))
1. De interfaces in System.Collocties die het gedrag van de collectie weergeven zijn: 1) ICollection Definieer de grootte, het aantal enums en synchronisatiemethoden voor alle collecties. Afgeleid van IEnumerable Het definieert het meest basale gedrag van de verzamelingsklasse, en alle verzamelklassen implementeren deze interface (basisinterface) Maar het gedrag is te basaal: het is voornamelijk een Count-eigenschap, en het heeft weinig zin om het alleen te implementeren
2) IEnumerable Exposeer een enumeratie die eenvoudige iteraties op een verzameling ondersteunt Het heeft slechts één methode, GetEnumerator(), die een IEnumerator-interface teruggeeft waardoor het de collectie kan doorlopen In principe implementeren alle verzamelklassen deze interface
3) IList De IList-implementatie is een verzameling waarden die sorteerbaar zijn en toegankelijk zijn via index voor haar leden, en het implementeert zelf de ICollection- en IEnumerable-interfaces is de abstracte basisklasse voor alle lijsten. Er zijn drie categorieën IList-implementaties: alleen-lezen, vaste grootte en variabele grootte.
4) IDENTIFICATIE De IDictionary-implementatie is een verzameling sleutel/waardeparen die zelf de ICollection- en IEnumerable interfaces implementeert is de basisinterface van een verzameling sleutel/waardeparen. Er zijn drie categorieën IDictionary-implementaties: alleen-lezen, vaste grootte en variabele grootte. IDictionary kan een woordenboek, map of shashlijst worden genoemd, en het benadert waarden op basis van sleutels (van elk type).
2. De verzamelingsklassen die direct in System.Collecties kunnen worden gebruikt, zijn: 1) ArrayList Interfaces implementeren: IList, ICollection, IEnumerable Zolang de collectie niet wordt gewijzigd, kan ArrayList veilig meerdere lezers tegelijk ondersteunen Naarmate elementen aan de ArrayList worden toegevoegd, wordt de capaciteit automatisch verhoogd op verzoek door herverdeling (2x verhoging) Als je een array van objecten moet maken, maar je weet de grootte van de array niet van tevoren, kun je ArrayList gebruiken ArrayList verwijst naar alle elementen als objecten, dus het moet getypeerd worden bij het openen van elementen in ArrayList Voordelen: Dynamisch de grootte veranderen, flexibel en handig invoegen en verwijderen van elementen, sorteerbaarheid Nadelen: De insertieprestaties zijn niet zo goed als die van arrays, niet van sterke types
2) BitArray Interfaces implementeren: ICollection en IEnumerable Beheer gecomprimeerde arrays van bitwaarden.
3) Hashtabel Interfaces implementeren: IDictionary, ICollection, IEnumerable Je kunt vrij elementen toevoegen en verwijderen aan de Hashtable, sommige zoals ArrayList, maar dan zonder de prestatie-overhead
4) SortedList Interfaces implementeren: IDictionary, ICollection, IEnumerable SortedLIst combineert de voordelen van ArrayList en Hashtable, en kan worden gesorteerd op sleutelwaarde
5) Wachtrij Interfaces implementeren: ICollection en IEnumerable Queques zijn wachtrijen, first-in, first-out toegang tot individuele elementen Je kunt de GetEnumerator()-methode van het Queque-object aanroepen om het IEnumerator-object door de elementen in de wachtrij te laten itereren
6) Stapelen Interfaces implementeren: ICollection en IEnumerable Een stack is een stack die individuele elementen op een last-in, first-out basis toegang geeft Je kunt de GetEnumerator()-methode van het Stack-object aanroepen om het IEnumerator-object door de elementen in de stack te laten itereren
3. De hierboven genoemde verzamelingsklassen zijn allemaal algemene verzamelklassen, en de meeste elementen die ze accepteren zijn van het Object-type, wanneer het object wordt geplaatst in Na de verzameling gaat de oorspronkelijke type-informatie verloren - dat wil zeggen, deze algemene verzamelingsklassen zijn niet sterk getypeerd De oplossing is om sterk getypeerde verzamelingsklassen te gebruiken System.Collections-naamruimte System.Collections.Specialized namespace Sommige klassen kunnen aan de eisen voldoen en direct worden gebruikt of geërfd
|