Egy gyűjtemény, amely egy olyan objektumhalmazt képvisel, amelyhez minden elem áthaladásával érhető el (különösen foreach ciklus használatával) Egy gyűjtemény több elemet tartalmaz, azaz van egy gyűjteményosztály objektum és N elem objektum
Mivel bármely gyűjteményosztály megvalósítja az IEnumerable felületet, bármely gyűjteményosztály objektumnak van egy GetEnumerator() metódusa, amely vissza tud adni egy olyan objektumot, amely az IEnumerator interfészt valósítja meg, amely sem gyűjteményosztály objektum, sem gyűjteményelem osztályobjektum, hanem független osztályobjektum. Ez az objektum lehetővé teszi, hogy minden elem objektumon áthaladj a gyűjteményosztály objektumában
Ha a gyűjteményosztály felhasználó által definiált gyűjteményosztály, a felhasználónak meg kell valósítania a GetEnumerator() metódusát, különben a hurkok nem használhatók. Természetesen az IEnumerator osztály, amely ehhez az egyedi gyűjteményosztályhoz (az az interfészt megvalósító osztályhoz) is testreszabni kell
Például az IEnumerator, amely a ArrayList gyűjtemény osztályának felel meg, az ArrayListEnumeratorSimple Az IEnumerator, amely a Tömbgyűjtemény osztályhoz tartozik, a SZArrayEnumerator. (Egyik osztály sem szerepel a .NET Framework Class Library dokumentációjában (MSDN))
1. A System.Colloctions interfészei, amelyek a gyűjtemény viselkedését képviselik: 1) OLLECTION Határozd meg az összes gyűjtemény méretét, számát és szinkronizációs módszereit. IEnumerable alapján származtatva Ez határozza meg a gyűjteményosztály legalapvetőbb viselkedését, és minden gyűjteményosztály ezt az interfészt (alapinterfészt) valósítja meg De a viselkedése túl alapvető: főként egy Count tulajdonság, és nincs túl értelme egyedül implementálni
2)IEnumerable Olyan felsorolást, amely támogatja az egyszerű iterációkat egy halmazon Csak egy módszere van, a GetEnumerator(), amely egy IEnumerator interfészt ad vissza, amelyen keresztül áthaladhat a gyűjteményen Gyakorlatilag minden gyűjteményosztály ezt az interfészt valósítja meg
3) IList Az IList megvalósítás egy olyan értékgyűjtemény, amelyek rendezhetők, és indexen keresztül elérhetők tagjai számára, maga pedig megvalósítja az ICollection és IEnumerable interfészeket az összes lista absztrakt alaposztálya. Az IList megvalósításainak három kategóriája van: csak olvasható, fix méretű és változóméretű.
4) Azonosító Az IDictionary megvalósítás kulcs/értékpárok gyűjteménye, amely maga valósítja meg az ICollection és IEnumerable interfészeket egy kulcs/értékpár alapinterfésze. Három kategóriába tartozó IDictionary megvalósítás létezik: csak olvasható, fix méretű és változóméretű. Az IDictionary szótárnak, térképnek vagy shash listának nevezhető, és kulcsok alapján ér hozzá értékeket (bármilyen típusból).
2. A System.Collections-ben közvetlenül használható gyűjteményosztályok a következők: 1)ArrayList Interfészek megvalósítása: IList, ICollection, IEnumerable Amíg a gyűjtemény nem változik, a ArrayList biztonságosan támogathatja több olvasót egyszerre Ahogy elemeket adnak hozzá a ArrayListhez, a kapacitás automatikusan növeli igény szerint áthelyezéssel (2-szeres növeléssel) Ha objektumokból álló tömböt kell létrehoznod, de előre nem tudod a tömb méretét, használhatod a ArrayList-et Az ArrayList minden elemet objektumként jelöl, ezért be kell gépelni, amikor elemeket érsz el a ArrayList-ben Előnyök: Dinamikus változtatás a méret, rugalmas és kényelmes elemek behelyezése és eltávolítása, szűrhetőség Hátrányok: Az illesztési teljesítmény nem olyan jó, mint a tömbök, nem erős típusok
2)BitArray Interfészek megvalósítása: ICollection és IEnumerable Kezeld a tömörített bitértékű tömböket.
3) Hashtable Interfészek megvalósítása: IDictionary, ICollection, IEnumerable Szabadon hozzáadhatsz vagy eltávolíthatsz elemeket a Hashtable-be, néhány, mint az ArrayList, de teljesítményterhelés nélkül
4)SortedList Interfészek megvalósítása: IDictionary, ICollection, IEnumerable A SortedLIst ötvözi a ArrayList és a Hashtable előnyeit, és kulcsérték szerint rendezhető
5) Sor Interfészek megvalósítása: ICollection és IEnumerable A queque-ek sorok, az egyes elemekhez való elsőként belépő, első kilépés Hívhatod a Queque objektum GetEnumerator() metódusát, hogy az IEnumerator objektum átfutja a sorban lévő elemeket
6) Stack Interfészek megvalósítása: ICollection és IEnumerable A stack egy olyan halom, amely egyes elemekhez fér hozzá utolsó, elsőként kilépő alapon Hívhatod a Stack objektum GetEnumerator() metódusát, hogy az IEnumerator objektum iterálja a stack elemeit
3. A fent említett gyűjteményosztályok mind általános gyűjteményosztályok, és az általuk elfogadott elemek többsége az objektum típusú, amikor az objektumot behelyezzük A gyűjtemény után az eredeti típusinformáció elveszik – vagyis ezek az általános gyűjteményosztályok nem erősen típusozottak A megoldás az erősen típusozott gyűjteményosztályok használata System.Collections névtér System.Collections.Specialized névtér Néhány osztály megfelel a követelményeknek, közvetlenül vagy öröklő vagy használható
|