Kogumik, mis esindab objektide kogumit, millele pääseb ligi iga elemendi läbimise teel (eriti sellele pääseb ligi foreach tsükli kaudu) Kogu sisaldab mitut elementi, st on olemas kollektsiooniklassi objekt ja N elementi objekti
Kuna iga kollektsiooniklass rakendab IEnumerable liidest, on igal kogumisklassi objektil GetEnumerator() meetod, mis võib tagastada objekti, mis rakendab IEnumeratori liidest, mis ei ole ei kollektsiooniklassi objekt ega kollektsioonielemendi klassiobjekt, vaid sõltumatu klassiobjekt. See objekt võimaldab läbi käia iga elemendiobjekti kollektsiooniklassi objektis
Kui kogumisklass on kasutaja määratletud koguklass, peab kasutaja rakendama oma GetEnumerator() meetodi, vastasel juhul ei saa kasutada tsükliid. Loomulikult tuleb ka selle kohandatud kogumisklassi (liidese teostav klass) vastav IEnumerator klass kohandada
Näiteks IEnumerator, mis vastab ArrayList kogumisklassile, on ArrayListEnumeratorSimple IEnumerator, mis vastab massiivi kogumise klassile, on SZArrayEnumerator (Kumbki klass ei ole kaetud .NET Framework Class Library dokumentatsioonis (MSDN))
1. System.Colloctions liidesed, mis esindavad kogu käitumist, on: 1) ICollection Määrake kõigi kogude suurus, enumite arv ja sünkroniseerimismeetodid. Tuletatud IEnumerable'ist See määratleb kogumisklassi kõige põhilisema käitumise ning kõik kollektsiooniklassid rakendavad seda liidest (baasliides) Aga selle käitumine on liiga lihtne: see on peamiselt Counti omadus ja pole eriti mõtet seda üksi rakendada
2) IEnumerable Paljasta loendamine, mis toetab lihtsaid iteratsioone hulga peal Sellel on ainult üks meetod, GetEnumerator(), mis tagastab IEnumeratori liidese, mille kaudu saab kogu läbi liikuda Põhimõtteliselt rakendavad kõik kollektsiooniklassid seda liidest
3) IList IList rakendus on väärtuste kogum, mida saab sorteerida ja millele liikmete jaoks pääseb ligi indeksi järgi, ning see ise rakendab ICollectioni ja IEnumerable liidesed on kõigi nimekirjade abstraktne baasklass. IList rakendusi jagunevad kolme kategooriasse: ainult lugemiseks, fikseeritud suurusega ja muutuva suurusega.
4) IDictionary IDictionary rakendus on võtme/väärtuse paaride kogum, mis omakorda rakendab ICollectioni ja IEnumerable liidesed on võtme/väärtuse paaride kogumi baasliides. IDictionary rakendusi jagunevad kolme kategooriasse: ainult lugemiseks, fikseeritud suurusega ja muutuva suurusega. IDictionary'd võib nimetada sõnastikuks, kaardiks või shash listiks ning see pääseb ligi võtmete (igat tüüpi võtmete) alusel.
2. Kogumisklassid, mida saab kasutada otse System.Collectionsis, on: 1) ArrayList Rakenda liideseid: IList, ICollection, IEnumerable Kui kogumikku ei muudeta, saab ArrayList ohutult toetada mitut lugejat samaaegselt Kui elemente lisatakse ArrayListile, suureneb mahutavus automaatselt nõudmisel, jagades ümber (2x suurem) Kui pead looma massiivi objektidest, kuid sa ei tea eelnevalt massiivi suurust, võid kasutada ArrayListi ArrayList viitab kõigile elementidele objektidena, seega tuleb see tippida, kui ArrayListis elementidele ligi pääsed. Plussid: Dünaamiline suurus, paindlik ja mugav elementide lisamine ja eemaldamine, sorteeritavus Puudused: Sisestusvõime ei ole nii hea kui massiivid, mitte tugevad tüübid
2) BitArray Rakenda liideseid: ICollection ja IEnumerable Halda tihendatud bitiväärtuste massiivisid.
3) Räsitabel Rakenda liideseid: IDictionary, ICollection, IEnumerable Sa saad vabalt lisada ja eemaldada elemente Hashtable'i, mõned nagu ArrayList, kuid ilma jõudluskuluta
4) SortedList Rakenda liideseid: IDictionary, ICollection, IEnumerable SortedLIst ühendab ArrayListi ja Hashtable'i eelised ning seda saab sorteerida võtmeväärtuse järgi
5) Järjekord Rakenda liideseid: ICollection ja IEnumerable Queque'id on järjekorrad, esimesena sisse, esimesena välja ligipääs üksikutele elementidele Saad kutsuda Queque objekti GetEnumerator() meetodit, et IEnumerator objekt saaks järjekorra elementide vahel iteratsiooni teha
6) Stack Rakenda liideseid: ICollection ja IEnumerable Virn on virn, mis pääseb ligi üksikutele elementidele viimase sisse ja esimesena välja põhimõttel Saad kutsuda Stack objekti GetEnumerator() meetodit, et IEnumerator objekt saaks pinna elementide vahel iteratsiooni teha
3. Ülalmainitud kogumisklassid on kõik üldised koguklassid ning enamik elemente, mida nad aktsepteerivad, kuuluvad objekti tüübile, kui objekt lisatakse Pärast kogumist kaob algne tüübiinfo – see tähendab, et need üldised kollektsiooniklassid ei ole tugevalt tüübistatud Lahendus on kasutada tugevalt tüübistatud kollektsiooniklasse System.Collections nimeruum System.Collections.Spetsialiseeritud nimeruum Mõned klassid vastavad nõuetele ja neid saab kasutada otse või pärida
|