Kolekcia, ktorá predstavuje súbor objektov, ku ktorým sa dá pristupovať prechádzaním každého prvku (konkrétne je prístupná pomocou foreach loop) Kolekcia obsahuje viacero prvkov, t. j. existuje objekt triedy kolekcie a objekty N prvkov
Keďže akákoľvek trieda kolekcie implementuje rozhranie IEnumerable, každý objekt triedy kolekcie má metódu GetEnumerator(), ktorá môže vrátiť objekt implementujúci rozhranie IEnumerator, ktorý nie je ani objektom triedy kolekcie, ani elementom triedy kolekcie, je to nezávislý objekt triedy. Tento objekt vám umožňuje prechádzať každý element objekt v objekte triedy kolekcie
Ak je trieda kolekcie používateľom definovaná trieda kolekcie, používateľ musí implementovať svoju metódu GetEnumerator(), inak nie je možné použiť slučky. Samozrejme, trieda IEnumerator zodpovedajúca tejto vlastnej kolekcii (trieda, ktorá implementuje rozhranie) musí byť tiež prispôsobená
Napríklad IEnumerátor zodpovedajúci triede kolekcie ArrayList je ArrayListEnumeratorSimple IEnumerátor zodpovedajúci triede Array collection je SZArrayEnumerator (Ani jedna trieda nie je pokrytá v dokumentácii .NET Framework Class Library (MSDN))
1. Rozhrania v System.Colloctions, ktoré reprezentujú správanie kolekcie, sú: 1) ICollection Definujte veľkosť, počet enumov a metódy synchronizácie pre všetky kolekcie. Odvodené z IEnumerable Definuje najzákladnejšie správanie triedy kolekcie a všetky triedy kolekcií implementujú toto rozhranie (základné rozhranie) Ale jeho správanie je príliš základné: je to hlavne vlastnosť Counta a nemá veľký zmysel implementovať ho samostatne
2) IEnumerable Odhalte enumeráciu, ktorá podporuje jednoduché iterácie na množine Má len jednu metódu, GetEnumerator(), ktorá vracia rozhranie IEnumeratora, cez ktoré môže prechádzať kolekciou V podstate všetky triedy kolekcií implementujú toto rozhranie
3) IList Implementácia IList je kolekcia hodnôt, ktoré sú triediteľné a prístupné podľa indexu pre svojich členov, pričom sama implementuje rozhrania ICollection a IEnumerable je abstraktná základná trieda pre všetky zoznamy. Existujú tri kategórie implementácií IList: iba na čítanie, pevná veľkosť a variabilná veľkosť.
4) IDictionary Implementácia IDictionary je zbierka párov kľúč/hodnota, ktorá sama implementuje ICollection a IEnumerable rozhrania je základné rozhranie kolekcie párov kľúč/hodnota. Existujú tri kategórie implementácií IDictionary: iba na čítanie, pevná veľkosť a variabilná veľkosť. IDictionary môže byť nazývaný slovník, mapa alebo zoznam shash súborov a pristupuje k hodnotám na základe kľúčov (akéhokoľvek typu).
2. Triedy kolekcií, ktoré môžu byť priamo použité v System.Collections, sú: 1) ArrayList Implementujte rozhrania: IList, ICollection, IEnumerable Pokiaľ kolekcia nie je upravovaná, ArrayList môže bezpečne podporovať viacero čítačiek naraz Keď sa prvky pridávajú do ArrayListu, kapacita sa automaticky zvyšuje na požiadanie preusporiadaním (2-násobné zvýšenie) Ak potrebujete vytvoriť pole objektov, ale neviete jeho veľkosť vopred, môžete použiť ArrayList ArrayList označuje všetky prvky ako objekty, preto je potrebné ho zadať pri prístupe k prvkom v ArrayList Výhody: Dynamická zmena veľkosti, flexibilné a pohodlné vkladanie a odstraňovanie prvkov, triediteľnosť Nevýhody: Výkon vkladania nie je taký dobrý ako u polí, nie pri silných typoch
2) BitArray Implementujte rozhrania: ICollection a IEnumerable Spravovať komprimované polia bitových hodnôt.
3) Hashtable Implementujte rozhrania: IDictionary, ICollection, IEnumerable Môžete voľne pridávať a odstraňovať prvky do hashtable, niektoré ako ArrayList, ale bez výkonnostnej záťaže
4) SortedList Implementujte rozhrania: IDictionary, ICollection, IEnumerable SortedLIst kombinuje výhody ArrayList a Hashtable a môže byť zoradený podľa hodnoty kľúča
5) Queue Implementujte rozhrania: ICollection a IEnumerable Quequey sú fronty, prístup prvý dnu, prvý von, prístup k jednotlivým prvkom Môžete zavolať metódu GetEnumerator() objektu Queque, aby objekt IEnumerator iteroval prvky vo fronte
6) Stack Implementujte rozhrania: ICollection a IEnumerable Zásobník je zásobník, ktorý pristupuje k jednotlivým prvkom na princípe posledný dnu, prvý von. Môžete zavolať metódu GetEnumerator() objektu Stack, aby objekt IEnumerator iteroval prvky v zásobníku
3. Vyššie uvedené triedy kolekcií sú všetky všeobecné triedy kolekcií a väčšina prvkov, ktoré prijímajú, je typu objektu, keď je objekt vložený do Po skončení kolekcie sa pôvodné informácie o type strácajú – teda tieto všeobecné triedy kolekcií nie sú silno typované Riešením je použiť silne typované triedy kolekcií Menný priestor System.Collections System.Collections.Specialized menný priestor Niektoré triedy môžu spĺňať požiadavky a môžu byť použité priamo alebo zdedené
|