Den nyttige generiske listen i VB.NET

Generics utvider kraften og fleksibiliteten til VB.NET på mange områder, men du får en større ytelsesfordel og flere programmeringsalternativer i det generiske Liste objekt [Liste (av T)] enn med noen andre.

Å bruke Liste (av T), må du forstå hvordan du implementerer de mange metodene som .NET Framework gir. Nedenfor er tre eksempler som bruker For hver, FindAll, og Sortere, som demonstrerer hvordan den generiske Liste klasse fungerer.

Det aller første trinnet er å lage en generisk Liste. Du kan få dataene på mange måter, men det enkleste er å bare Legg til den. Koden under viser hvordan jeg klassifiserer øl- og vinsamlingen min!

Starter kode

Det må først være et objekt som vil representere en flaske fra samlingen. I en Windows Forms-applikasjon må Form-klassen først være i en fil, eller Visual Studio-designeren fungerer ikke riktig, så sett dette mot slutten:

Offentlig klasse flaske. Offentlig merkevare som streng. Offentlig navn som streng. Offentlig kategori som streng. Offentlig størrelse som desimal. Public Sub New (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category As String, _. ByVal m_Size As Decimal) Merke = m_Brand. Navn = m_Name. Kategori = m_Kategori. Størrelse = m_Size. Slutt sub. Sluttklasse
instagram viewer

For å bygge samlingen, Legg til Gjenstandene. Dette er hva som er i Formbelastning begivenhet:

Dim skap som liste (av flaske) = _. "Ny liste (av flaske) Kabinett. Legg til (Ny flaske (_. "Castle Creek", _. "Uintah Blanc", _. "Vin", 750)) Kabinett. Legg til (Ny flaske (_. "Zion Canyon Brewing Company", _. "Springdale Amber Ale", _. "Øl", 355)) Kabinett. Legg til (Ny flaske (_. "Spanish Valley Vineyards", _. "Syrah", _. "Vin", 750)) Kabinett. Legg til (Ny flaske (_. "Wasatch Beers", _. "Polygamy Porter", _. "Øl", 355)) Kabinett. Legg til (Ny flaske (_. "Squatters Beer", _. "Provo Girl Pilsner", _. "Øl", 355))

Alle kodene ovenfor er standardkode i VB.NET 1.0. Vær imidlertid oppmerksom på at ved å definere din egen Flaske objekt, får du fordelene med flere typer i samme samling (i dette tilfellet begge deler string og Desimal) og effektiv, type sikker "senbinding."

For hvert eksempel

Moroa starter når vi bruker metodene. For å begynne, la oss implementere det kjente For hver metode. Microsoft-dokumentasjonen inkluderer denne syntaksdefinisjonen for bruk:

Dim forekomst som liste Dim handling som handling (av T) -forekomst. ForEach (action)

Microsoft definerer videre handling som "delegere til en metode som utfører en handling på objektet som er sendt til det. Elementene i den nåværende listen (T) overføres individuelt til handlings- (T) delegaten. "

Tips: For mer om delegater, les Bruke delegater i Visual Basic .NET for fleksibilitet i løpet av tiden.

Det første du trenger å kode, er metoden som blir delegert. Å misforstå dette ene nøkkelpunktet er kilden til mest av forvirringen av VB.NET-studenter. Denne funksjonen, eller subroutine, er der all den tilpassede kodingen for objektene "Av" er utført.

Når du utføres riktig, er du egentlig ferdig. Det er veldig enkelt i dette første eksemplet. Et helt eksempel på Flaske passeres og subroutinen velger alt som trengs av det. Koding av For hver seg selv er enkelt også. Bare fyll ut adressen til delegaten ved å bruke AddressOf metode.

Sub displayBottle (ByVal b As Bottle) Resultatliste. Elementer. Legg til (_ b. Merke & "-" & _ b. Navn & "-" & _ b. Kategori & "-" & _ b. Størrelse) Slutt Sub Private Sub ForEachButton_Click (... Resultatlisten. Elementer. Clear () Resultatliste. Elementer. Legg til ("For hvert eksempel") Resultatliste. Elementer. Legg til ("") skap. ForEach (AddressOf displayBottle) End Sub

Finn alle eksempler

FindAll er litt mer komplisert. Microsoft-dokumentasjonen for FindAll ser slik ut:

Dim forekomst som liste Dim samsvarer som predikat (av T) Dim returValue As List (Of T) returnValue = instans. Finn alt (kamp)

Denne syntaksen inkluderer et nytt element, Predikat (av T). I følge Microsoft vil dette representere metoden "som definerer et sett med kriterier og avgjør om spesifisert objekt oppfyller disse kriteriene. "Med andre ord kan du opprette en hvilken som helst kode som vil finne noe i liste. Jeg kodet min Predikat (av T) å finne noe i "Øl" Kategori.

I stedet for å ringe delegatkoden for hvert element på listen, FindAll returnerer en hel Liste (T) som bare inneholder kampene som er resultatet fra din Predikat (av T). Det er opp til koden din å begge definere dette sekundet Liste (T) og gjør noe med det. Koden min legger bare varene til a ListBox.

Privat sub FindAllButton_Click (ByVal avsender som system. Objekt, ByVal e As System. EventArgs) Håndterer FindAllButton. Klikk på Resultatliste. Elementer. Clear () Resultatliste. Elementer. Legg til ("FindAll eksempel") Resultatliste. Elementer. Legg til ("") Dim sublist As List (Of Bottle) sublist = Cabinet. FindAll (AddressOf findBeer) For hver r som flaske i sublist ResultatListe. Elementer. Legg til (_ r. Merke & "-" & _ r. Navn & "-" & _ r. Kategori & "-" & _ r. Størrelse) Next End Sub Funksjon findBeer (ByVal b Som Flaske) _ Som Boolsk Hvis (b. Category = "Beer") Returner deretter True Else Return False End If End-funksjon

Sorter eksempel

Den endelige metoden denne artikkelen undersøker er Sortere. Igjen bruker Microsoft noen terminologier du kanskje ikke er kjent med. Det er faktisk fire forskjellige overbelastninger av Sortere metode:

  • Sortere()
  • Sorter (IComparer (T))
  • Sorter (sammenligning (T))
  • Sorter (Int32, Int32, IComparer (T))

Dette lar deg bruke sorteringsmetoder definert i .NET Framework for listen, kode dine egne, bruke et system definert sammenligning for typen, eller sorter en del av samlingen ved å bruke en startposisjon og telling parameter.

I dette eksempelet, siden jeg bruker følgende syntaks for å faktisk utføre sorteringen, bruker jeg den tredje overbelastningen.

x. Name.x. Navn. SammenlignTo (y. Name) (y. Navn)

Jeg har kodet en annen delegat til min egen sammenligning. Siden jeg vil sortere etter mitt Navn, Jeg trekker akkurat den verdien fra hver forekomst av Flaske objekt som er passert og bruk Sorter (Sammenligning )>)). De Sortere metoden omorganiserer originalen Liste (T). Det er det som blir behandlet etter at metoden er utført.

Privat sub SortButton_Click (ByVal avsender som system. Objekt, ByVal e As System. EventArgs) Håndterer SortButton. Klikk på Resultatliste. Elementer. Clear () Resultatliste. Elementer. Legg til ("Sorter eksempel") Resultatliste. Elementer. Legg til ("") skap. Sorter (AddressOf sortCabinet) for hver r som flaske i skap Resultatliste. Elementer. Legg til (_ r. Navn & "-" & _ r. Merke & "-" & _ r. Kategori & "-" & _ r. Størrelse) Neste slutt Sub Privat delt funksjon sorteringKabinett (_ ByVal x Som flaske, ByVal y som flaske) Som heltal Retur x. Navn. SammenlignTo (y. Navn) Sluttfunksjon

Disse metodene ble valgt for å demonstrere de viktigste måtene som rammemetodene er i Liste (T) er faktisk kodet. Det er imidlertid en hel rekke andre metoder. Det er det som gjør Liste (T) så nyttig!