En samling, der repræsenterer et sæt objekter, som kan tilgås ved at gennemgå hvert element (især kan den tilgås via foreach loop) En samling indeholder flere elementer, dvs. der findes et samlingsklasseobjekt og N elementobjekter
Fordi enhver samlingsklasse implementerer IEnumerable-grænsefladen, har ethvert samlingsklasseobjekt en GetEnumerator()-metode, som kan returnere et objekt, der implementerer IEnumerator-grænsefladen, som hverken er et samlingsklasseobjekt eller et samlingselement-klasseobjekt, men et uafhængigt klasseobjekt. Dette objekt tillader dig at iterere gennem hvert elementobjekt i samlingsklasseobjektet
Hvis samlingsklassen er en brugerdefineret samlingsklasse, skal brugeren implementere dens GetEnumerator()-metode, ellers kan løkker ikke bruges. Selvfølgelig skal IEnumerator-klassen, der svarer til denne custom collection-klasse (klassen, der implementerer interfacet), også tilpasses
For eksempel er IEnumeratoren, der svarer til ArrayList-samlingsklassen, ArrayListEnumeratorSimple IEnumeratoren, der svarer til Array-samlingsklassen, er SZArrayEnumerator (Ingen af klasserne er dækket i .NET Framework Class Library-dokumentationen (MSDN))
1. Grænsefladerne i System.Colloctions, der repræsenterer samlingens adfærd, er: 1) ICollection Definér størrelsen, antallet af enums og synkroniseringsmetoder for alle samlinger. Afledt af IEnumerable Den definerer den mest grundlæggende adfærd for samlingsklassen, og alle samlingsklasser implementerer dette interface (basisgrænseflade) Men dens adfærd er for grundlæggende: det er hovedsageligt en Count-egenskab, og det giver ikke meget mening at implementere den alene
2) IEnumerable Eksponér en opramning, der understøtter simple iterationer på en mængde Den har kun én metode, GetEnumerator(), som returnerer et IEnumerator-interface, hvorigennem den kan gennemgå samlingen Grundlæggende implementerer alle samlingsklasser dette interface
3) IList IList-implementeringen er en samling værdier, der kan sorteres og kan tilgås efter indeks for dens medlemmer, og den implementerer selv ICollection- og IEnumerable-grænsefladerne er den abstrakte baseklasse for alle lister. Der findes tre kategorier af IList-implementeringer: skrivebeskyttet, fast størrelse og variabel størrelse.
4) IDIKOLOGI IDictionary-implementeringen er en samling af nøgle/værdi-par, der selv implementerer ICollection og IEnumerable grænseflader er basisgrænsefladen for en samling nøgle/værdi-par. Der findes tre kategorier af IDictionary-implementeringer: skrivebeskyttet, fast størrelse og variabel størrelse. IDictionary kan kaldes en ordbog, et kort eller en shash-liste, og den tilgår værdier baseret på nøgler (af enhver type).
2. De samlingsklasser, der kan bruges direkte i System.Collections, er: 1) ArrayList Implementér grænseflader: IList, ICollection, IEnumerable Så længe samlingen ikke ændres, kan ArrayList sikkert understøtte flere læsere samtidig Når elementer tilføjes til ArrayList, øges kapaciteten automatisk efter behov ved omfordeling (2x forøgelse) Hvis du skal oprette et array af objekter, men ikke kender størrelsen på arrayet på forhånd, kan du bruge ArrayList ArrayList refererer til alle elementer som objekter, så det skal skrives, når man tilgår elementer i ArrayList Fordele: Dynamisk ændring af størrelsen, fleksibel og bekvem indsættelse og fjernelse af elementer, sorterbarhed Ulemper: Indsættelsesydelsen er ikke så god som arrays, ikke stærke typer
2) BitArray Implementér grænseflader: ICollection og IEtallable Styr komprimerede arrays af bitværdier.
3) Hashtabel Implementér grænseflader: IDictionary, ICollection, IEnumerable Du kan frit tilføje og fjerne elementer til hashtabellen, nogle som ArrayList, men uden performance-overhead
4) Sorteret liste Implementér grænseflader: IDictionary, ICollection, IEnumerable SortedLIst kombinerer fordelene ved ArrayList og Hashtable og kan sorteres efter nøgleværdi
5) Kø Implementér grænseflader: ICollection og IEtallable Queques er køer, først ind, først ud adgang til individuelle elementer Du kan kalde GetEnumerator()-metoden for Queque-objektet for at få IEnumerator-objektet til at iterere gennem elementerne i køen
6) Stack Implementér grænseflader: ICollection og IEtallable En stak er en stak, der tilgår individuelle elementer på en sidst-ind, først-ud-basis Du kan kalde GetEnumerator()-metoden for Stack-objektet for at få IEnumerator-objektet til at iterere gennem elementerne i stakken
3. De ovennævnte samlingsklasser er alle generelle samlingsklasser, og de fleste af de elementer, de accepterer, er af Objekttypen, når objektet placeres i Efter samlingen går den oprindelige typeinformation tabt – det vil sige, at disse generelle samlingsklasser ikke er stærkt typede Løsningen er at bruge stærkt typede samlingsklasser System.Collections-navnerum System.Collections.Specialiseret navnerum Nogle klasser kan opfylde kravene og kan bruges direkte eller arves
|