Kolekce, která představuje sadu objektů, ke kterým lze přistupovat procházením každého prvku (zejména lze k nim přistupovat pomocí foreach smyčky) Kolekce obsahuje více prvků, tj. existuje objekt třídy kolekce a objekty s N prvky
Protože každá třída kolekce implementuje rozhraní IEnumerable, má každý objekt třídy kolekce metodu GetEnumerator(), která může vrátit objekt implementující rozhraní IEnumerator, který není ani objektem třídy kolekce, ani elementem třídy kolekce, je to nezávislý objekt třídy. Tento objekt vám umožňuje procházet každý element objekt v objektu kolekce
Pokud je třída kolekce uživatelem definovaná třída kolekce, uživatel musí implementovat svou metodu GetEnumerator(), jinak nelze použít smyčky. Samozřejmě, třída IEnumerator odpovídající této třídě vlastní kolekce (třída, která implementuje toto rozhraní) musí být také přizpůsobena
Například IEnumerátor odpovídající třídě kolekce ArrayList je ArrayListEnumeratorSimple IEnumerátor odpovídající třídě kolekce Array je SZArrayEnumerator (Ani jedna třída není pokryta v dokumentaci .NET Framework Class Library (MSDN))
1. Rozhraní v System.Colloctions, která reprezentují chování kolekce, jsou: 1) ICollection Definujte velikost, počet enumů a metody synchronizace pro všechny kolekce. Odvozeno z IEnumerable Definuje nejzákladnější chování třídy kolekce a všechny třídy kolekcí implementují toto rozhraní (základní rozhraní) Ale jeho chování je příliš základní: je to hlavně vlastnost Counta a nedává moc smysl ji implementovat samostatně
2) IEnumerable Představte enumeraci, která podporuje jednoduché iterace na množině Má pouze jednu metodu, GetEnumerator(), která vrací rozhraní IEnumerator, přes které může procházet kolekcí V podstatě všechny třídy kolekcí implementují toto rozhraní
3) IList Implementace IList je kolekce hodnot, které lze třídit a k nim lze přistupovat podle indexu pro jejich členy, a sama implementuje rozhraní ICollection a IEnumerable je abstraktní základní třída pro všechny seznamy. Existují tři kategorie implementací IList: pouze pro čtení, pevná velikost a proměnná velikost.
4) IDictionary Implementace IDictionary je kolekce dvojic klíč/hodnota, která sama implementuje rozhraní ICollection a IEnumerable je základní rozhraní kolekce párů klíč/hodnota. Existují tři kategorie implementací IDictionary: pouze pro čtení, s pevnou velikostí a s proměnnou velikostí. IDictionary lze nazývat slovníkem, mapou nebo shash seznamem a přistupuje k hodnotám na základě klíčů (jakéhokoliv typu).
2. Třídy kolekcí, které lze přímo použít v System.Collections, jsou: 1) ArrayList Implementujte rozhraní: IList, ICollection, IEnumerable Pokud není kolekce upravována, může ArrayList bezpečně podporovat více čtenářů současně Jak jsou prvky přidávány do ArrayListu, kapacita se automaticky zvyšuje na vyžádání přerozdělením (2x zvýšení) Pokud potřebujete vytvořit pole objektů, ale nevíte předem velikost pole, můžete použít ArrayList ArrayList označuje všechny prvky jako objekty, proto je nutné jej napsat při přístupu k prvkům v ArrayList Výhody: Dynamická změna velikosti, flexibilní a pohodlné vkládání a odstraňování prvků, tříditelnost Nevýhody: Výkon vkládání není tak dobrý jako u polí, nejsou to silné typy
2) BitArray Implementujte rozhraní: ICollection a IEnumerable Spravujte komprimovaná pole bitových hodnot.
3) Hashtable Implementujte rozhraní: IDictionary, ICollection, IEnumerable Prvky můžete volně přidávat a odebírat do hashtable, některé jako ArrayList, ale bez výkonu
4) SortedList Implementujte rozhraní: IDictionary, ICollection, IEnumerable SortedLIst kombinuje výhody ArrayList a Hashtable a lze jej třídit podle hodnoty klíče
5) Fronta Implementujte rozhraní: ICollection a IEnumerable Quequey jsou fronty, přístup první dovnitř, první ven k jednotlivým prvkům Můžete zavolat metodu GetEnumerator() objektu Queque, aby objekt IEnumerator procházel prvky ve frontě
6) Stack Implementujte rozhraní: ICollection a IEnumerable Zásobník je zásobník, který přistupuje k jednotlivým prvkům na principu poslední dovnitř, první ven Můžete zavolat metodu GetEnumerator() objektu Stack, abyste přiměli objekt IEnumerator procházet prvky ve zásobníku
3. Výše zmíněné třídy kolekcí jsou všechny obecné třídy kolekcí a většina prvků, které přijímají, patří typu objektu, když je objekt vložen do Po skončení kolekce se původní informace o typu ztrácí – tedy tyto obecné třídy kolekcí nejsou silně typované Řešením je použít silně typované třídy kolekcí Jmenný prostor System.Collections System.Collections.Specialized jmenný prostor Některé třídy mohou splňovat požadavky a mohou být použity přímo nebo zděděné
|