Kolekcja reprezentująca zestaw obiektów, do których można uzyskać dostęp poprzez przechodzenie przez każdy element (w szczególności można do niej uzyskać dostęp za pomocą pętli foreach) Kolekcja zawiera wiele elementów, tzn. istnieje obiekt klasy kolekcji oraz N obiektów
Ponieważ każda klasa kolekcji implementuje interfejs IEnumerable, każdy obiekt klasy kolekcji posiada metodę GetEnumerator(), która może zwrócić obiekt implementujący interfejs IEnumerator, który nie jest ani obiektem klasy kolekcji, ani elementem klasy kolekcji, lecz jest niezależnym obiektem klasy. Ten obiekt pozwala na iterację każdego elementu w klasie kolekcji
Jeśli klasa kolekcji jest klasą kolekcji zdefiniowaną przez użytkownika, użytkownik musi zaimplementować swoją metodę GetEnumerator(), w przeciwnym razie nie można używać pętli. Oczywiście klasa IEnumerator odpowiadająca tej niestandardowej klasie kolekcji (klasa implementująca interfejs) również musi być dostosowana
Na przykład IEnumerator odpowiadający klasie kolekcji ArrayList to ArrayListEnumeratorSimple Numerator IEnumerator odpowiadający klasie zbiorów tablic to SZArrayEnumerator (Żadna z tych klas nie jest objęta dokumentacją .NET Framework Class Library (MSDN))
1. Interfejsy w System.Colloctions, które reprezentują zachowanie kolekcji, to: 1) ICollection Zdefiniuj rozmiar, liczbę enumów oraz metody synchronizacji dla wszystkich kolekcji. Wywodząc się z IEnumerable Definiuje on najbardziej podstawowe zachowanie klasy kolekcji, a wszystkie klasy kolekcji implementują ten interfejs (interfejs bazowy) Ale jego zachowanie jest zbyt podstawowe: jest to głównie właściwość Counta i nie ma sensu implementować jej samodzielnie
2) IEnumerable Eksponuj wyliczanie obsługujące proste iteracje na zbiorze Ma tylko jedną metodę, GetEnumerator(), która zwraca interfejs IEnumeratora, przez który może przechodzić przez kolekcję Praktycznie wszystkie klasy kolekcji implementują ten interfejs
3) IList Implementacja IList to zbiór wartości, które można sortować i do których można uzyskać dostęp za pomocą indeksu dla jego członków, a sama implementuje interfejsy ICollection i IEnumerable jest abstrakcyjną klasą bazową dla wszystkich list. Istnieją trzy kategorie implementacji IList: tylko do odczytu, o stałym rozmiarze i o zmiennym rozmiarze.
4) Identycznik Implementacja IDictionary to zbiór par klucz/wartość, która sama implementuje interfejsy ICollection i IEnumerable jest bazowym interfejsem zbioru par klucz/wartość. Istnieją trzy kategorie implementacji IDictionary: tylko do odczytu, o stałym rozmiarze oraz o zmiennym rozmiarze. IDictionary może być nazywany słownikiem, mapą lub listą shash i uzyskuje dostęp do wartości na podstawie kluczy (dowolnego typu).
2. Klasy kolekcji, które mogą być bezpośrednio używane w System.Collections, to: 1) ArrayList Implementuj interfejsy: IList, ICollection, IEnumerable Dopóki kolekcja nie jest modyfikowana, ArrayList może bezpiecznie obsługiwać wiele czytników jednocześnie W miarę dodawania elementów do ArrayList, pojemność jest automatycznie zwiększana na żądanie poprzez relokację (2x wzrost) Jeśli musisz stworzyć tablicę obiektów, ale nie znasz jej rozmiaru wcześniej, możesz użyć ArrayList ArrayList odnosi się do wszystkich elementów jako obiektów, dlatego musi być wpisany podczas uzyskiwania dostępu do elementów w ArrayList Zalety: dynamiczna zmiana rozmiaru, elastyczne i wygodne wstawianie oraz usuwanie elementów, sortowalność Wady: Wydajność insertion nie jest tak dobra jak w matrycach, nie w typach mocnych
2) BitArray Implementuj interfejsy: ICollection i IEnumerable Zarządzaj skompresowanymi tablicami wartości bitowych.
3) Hashtable Implementuj interfejsy: IDictionary, ICollection, IEnumerable Możesz swobodnie dodawać i usuwać elementy do tablicy haszującej, niektóre jak ArrayList, ale bez obciążenia wydajności
4) SortedList Implementuj interfejsy: IDictionary, ICollection, IEnumerable SortedLIst łączy zalety ArrayList i Hashtable i może być sortowany według wartości klucza
5) Kolejka Implementuj interfejsy: ICollection i IEnumerable Queques to kolejki, dostęp pierwszy, pierwszy wyszedł do poszczególnych elementów Możesz wywołać metodę GetEnumerator() obiektu Queque, aby sprawić, że obiekt IEnumerator będzie iterował elementy w kolejce
6) Stack Implementuj interfejsy: ICollection i IEnumerable Stos to stos, który uzyskuje dostęp do poszczególnych elementów na zasadzie ostatni wchodzący, pierwszy wychodzący Możesz wywołać metodę GetEnumerator() obiektu stosu, aby sprawić, że obiekt IEnumerator iteruje elementy stosu
3. Wymienione powyżej klasy kolekcji to wszystkie ogólne klasy kolekcji, a większość elementów, które akceptują, należy do typu Obiekt, gdy obiekt jest umieszczany w Po zebraniu oryginalna informacja o typie jest tracona – to znaczy, te ogólne klasy kolekcji nie są silnie typowane Obejściem jest użycie silnie typowanych klas kolekcji Przestrzeń nazw System.Collections System.Collections.Specialized name space Niektóre klasy mogą spełniać wymagania i mogą być używane bezpośrednio lub dziedziczone
|