En samling som representerar en mängd objekt som kan nås genom att traversera varje element (särskilt kan den nås med foreach-loop) En samling innehåller flera element, det vill säga det finns ett samlingsklassobjekt och N elementobjekt
Eftersom varje samlingsklass implementerar IEnumerable-gränssnittet, har varje samlingsklassobjekt en GetEnumerator()-metod, som kan returnera ett objekt som implementerar IEnumerator-gränssnittet, vilket varken är ett samlingsklassobjekt eller ett samlingselement-klassobjekt, utan ett oberoende klassobjekt. Detta objekt låter dig iterera genom varje elementobjekt i samlingsklassobjektet
Om samlingsklassen är en användardefinierad samlingsklass måste användaren implementera sin GetEnumerator()-metod, annars kan loopar inte användas. Naturligtvis måste även IEnumerator-klassen som motsvarar denna anpassade samlingsklass (klassen som implementerar gränssnittet) anpassas
Till exempel är IEnumeratorn som motsvarar samlingsklassen ArrayList ArrayListEnumeratorSimple IEnumeratorn som motsvarar Array-samlingsklassen är SZArrayEnumerator (Ingen av klasserna täcks i .NET Framework Class Library-dokumentationen (MSDN))
1. Gränssnitten i System.Kollokationer som representerar samlingens beteende är: 1) ICollection Definiera storlek, antal enum och synkroniseringsmetoder för alla samlingar. Härlett från IEnumerable Den definierar det mest grundläggande beteendet för samlingsklassen, och alla samlingsklasser implementerar detta gränssnitt (basgränssnitt) Men dess beteende är för grundläggande: det är främst en Count-egenskap, och det är inte särskilt meningsfullt att implementera den ensam
2) IEnumerable Exponera en uppräkning som stödjer enkla iterationer på en mängd Den har bara en metod, GetEnumerator(), som returnerar ett IEnumerator-gränssnitt genom vilket den kan gå igenom samlingen I princip implementerar alla samlingsklasser detta gränssnitt
3) IList IList-implementeringen är en samling värden som är sorterbara och kan nås med index för dess medlemmar, och den implementerar själv ICollection- och IEnumerable-gränssnitten är den abstrakta basklassen för alla listor. Det finns tre kategorier av IList-implementationer: skrivskyddad, fast storlek och variabel storlek.
4) Diktor IDictionary-implementeringen är en samling nyckel-/värdepar som själv implementerar ICollection och IEnumerable-gränssnitten är basgränssnittet för en samling nyckel-/värdepar. Det finns tre kategorier av IDictionary-implementationer: skrivskyddad, fast storlek och variabel storlek. IDictionary kan kallas en ordbok, karta eller shash-lista, och den får tillgång till värden baserat på nycklar (av vilken typ som helst).
2. De samlingsklasser som kan användas direkt i System.Collections är: 1) ArrayList Implementera gränssnitt: IList, ICollection, IEnumerable Så länge samlingen inte ändras kan ArrayList säkert stödja flera läsare samtidigt När element läggs till i ArrayList ökar kapaciteten automatiskt vid behov genom omfördelning (2x ökning) Om du behöver skapa en array av objekt, men inte vet storleken på arrayen i förväg, kan du använda ArrayList ArrayList refererar till alla element som objekt, så det måste skrivas när man kommer åt element i ArrayList Fördelar: Dynamiskt ändra storleken, flexibel och smidig insättning och borttagning av element, sorterbarhet Nackdelar: Insättningsprestandan är inte lika bra som för arrays, inte starka typer
2) BitArray Implementera gränssnitt: ICollection och IEnumerable Hantera komprimerade arrayer av bitvärden.
3) Hashtabell Implementera gränssnitt: IDictionary, ICollection, IEnumerable Du kan fritt lägga till och ta bort element i Hashtabellen, vissa som ArrayList, men utan prestandaöverhead
4) Sorterad lista Implementera gränssnitt: IDictionary, ICollection, IEnumerable SortedLIst kombinerar fördelarna med ArrayList och Hashtable, och kan sorteras efter nyckelvärde
5) Kö Implementera gränssnitt: ICollection och IEnumerable Queques är köer, först in, först ut tillgång till enskilda element Du kan anropa GetEnumerator()-metoden för Queque-objektet för att få IEnumerator-objektet att iterera genom elementen i kön
6) Stack Implementera gränssnitt: ICollection och IEnumerable En stack är en stack som får tillgång till enskilda element på en sist-in, först-ut-princip Du kan anropa GetEnumerator()-metoden för stackobjektet för att få IEnumerator-objektet att iterera genom elementen i stacken
3. De samlingsklasser som nämnts ovan är alla allmänna samlingsklasser, och de flesta av de element de accepterar är av objekttypen när objektet placeras i Efter samlingen förloras den ursprungliga typinformationen – det vill säga att dessa allmänna samlingsklasser inte är starkt typade Lösningen är att använda starkt typade samlingsklasser System.Collections-namnrymden System.Collections.Specialiserat namnrymd Vissa klasser kan uppfylla kraven och kan användas direkt eller ärvas
|