Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 22702|Odpowiedź: 0

[Źródło] Istnieje kilka typów rollupów dla kolekcji w C#

[Skopiuj link]
Opublikowano 11.11.2014 08:44:59 | | |
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





Poprzedni:List otwarty do większości dupków w przeddzień Dnia Singli
Następny:C# Uniwersalny Range Rover (Skręt)
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com