O colecție care reprezintă un set de obiecte ce pot fi accesate parcurgând fiecare element (în special, poate fi accesată folosind bucla foreach) O colecție conține mai multe elemente, adică există un obiect de clasă de colecție și N obiecte de element
Deoarece orice clasă de colecție implementează interfața IEnumerabil, orice obiect de clasă de colecție are o metodă GetEnumerator(), care poate returna un obiect ce implementează interfața IEnumerator, care nu este nici un obiect de clasă de colecție, nici un obiect de clasă de colecție, ci un obiect de clasă independent. Acest obiect îți permite să iterezi prin fiecare obiect element din obiectul clasei de colecție
Dacă clasa de colecție este definită de utilizator, utilizatorul trebuie să implementeze metoda GetEnumerator(), altfel bucle nu pot fi folosite. Desigur, clasa IEnumerator corespunzătoare acestei clase personalizate de colecție (clasa care implementează interfața) trebuie de asemenea personalizată
De exemplu, IEnumeratorul corespunzător clasei de colecție ArrayList este ArrayListEnumeratorSimple IEnumeratorul corespunzător clasei de colecție Array este SZArrayEnumerator (Niciuna dintre clase nu este acoperită în documentația .NET Framework Class Library (MSDN))
1. Interfețele din System.Colloctions care reprezintă comportamentul colecției sunt: 1) Alegere Definește dimensiunea, numărul de enum-uri și metodele de sincronizare pentru toate colecțiile. Derivat din IEnumerable Definește cel mai de bază comportament al clasei de colecție, iar toate clasele de colecție implementează această interfață (interfață de bază) Dar comportamentul său este prea de bază: este în principal o proprietate Count și nu are prea mult sens să o implementezi singur
2) IEnumerabil Expune o enumerare care suportă iterații simple pe o mulțime Are o singură metodă, GetEnumerator(), care returnează o interfață IEnumerator prin care poate parcurge colecția Practic, toate clasele de colecție implementează această interfață
3) IList Implementarea IList este o colecție de valori care pot fi sortate și pot fi accesate prin index pentru membrii săi, iar ea însăși implementează interfețele ICollection și IEnumerable este clasa abstractă de bază pentru toate listele. Există trei categorii de implementări IList: doar pentru citire, dimensiuni fixe și dimensiuni variabile.
4) IDicționar Implementarea IDictionary este o colecție de perechi cheie/valoare care implementează la rândul său interfețele ICollection și IEnumerable este interfața de bază a unei colecții de perechi cheie/valoare. Există trei categorii de implementări IDictionary: doar citire, dimensiune fixă și dimensiune variabilă. IDictionary poate fi numit dicționar, hartă sau listă shash și accesează valori bazate pe chei (de orice tip).
2. Clasele de colecție care pot fi folosite direct în System. Colecțiile sunt: 1) ArrayList Interfețe de implementare: IList, ICollection, IEnumerable Atâta timp cât colecția nu este modificată, ArrayList poate suporta în siguranță mai mulți cititori simultan Pe măsură ce elementele sunt adăugate la ArrayList, capacitatea este crescută automat la cerere prin realocare (creștere de 2x) Dacă trebuie să creezi un tablou de obiecte, dar nu știi dimensiunea array-ului dinainte, poți folosi ArrayList ArrayList se referă la toate elementele ca obiecte, deci trebuie să fie tipat atunci când accesezi elementele din ArrayList Avantaje: Schimbare dinamică a dimensiunii, inserție și eliminare flexibilă și convenabilă a elementelor, sortabilitate Dezavantaje: Performanța de inserție nu este la fel de bună ca la array-uri, nu la tipurile puternice
2) BitArray Implementează interfețe: ICollection și IEnumerable Gestionează tablouri comprimate de valori de biți.
3) Hashtable Interfețe de implementare: IDictionary, ICollection, IEnumerable Poți adăuga și elimina liber elemente în Hashtable, unele precum ArrayList, dar fără overhead de performanță
4) SortedList Interfețe de implementare: IDictionary, ICollection, IEnumerable SortedLIst combină avantajele ArrayList și Hashtable și poate fi sortat după valoarea cheie
5) Coadă Implementează interfețe: ICollection și IEnumerable Queque-urile sunt cozi, acces primul intrat, primul ieșit la elemente individuale Poți folosi metoda GetEnumerator() a obiectului Queque pentru ca obiectul IEnumerator să itereze prin elementele din coadă
6) Stack Implementează interfețe: ICollection și IEnumerable O stivă este o stivă care accesează elemente individuale pe bază de ultimul intrat, primul ieșit Poți folosi metoda GetEnumerator() a obiectului Stack pentru ca obiectul IEnumerator să itereze prin elementele din stivă
3. Clasele de colecție menționate mai sus sunt toate clase generale de colecție, iar majoritatea elementelor pe care le acceptă sunt de tipul Obiect, atunci când obiectul este introdus în După colecție, informațiile originale de tip se pierd – adică aceste clase generale de colecție nu sunt puternic tipizate Soluția este să folosești clase de colecție puternic tipizate Spațiul de nume System.Collections System.Collections.Spațiu de nume specializat Unele clase pot îndeplini cerințele și pot fi folosite direct sau moștenite
|