Den nyttige generiske liste i VB.NET

Generics udvider kraften og fleksibiliteten i VB.NET på mange områder, men du får en større ydelsesfordel og flere programmeringsmuligheder i det generiske Liste objekt [Liste (af T)] end med nogen anden.

At bruge Liste (af T), skal du forstå, hvordan du implementerer de mange metoder, som .NET Framework indeholder. Nedenfor er tre eksempler, der bruger For hver, Findall, og Sortere, der demonstrerer, hvordan den generiske Liste klasse værker.

Det allerførste trin er at skabe en generisk Liste. Du kan få dataene på mange måder, men den enkleste er at bare Tilføje det. Koden herunder viser, hvordan jeg klassificerer min øl- og vinsamling!

Startkode

Der skal først være et objekt, der repræsenterer en flaske fra samlingen. I et Windows Forms-program skal Form-klassen først være i en fil, eller Visual Studio-designeren fungerer ikke korrekt, så sæt det her til sidst:

Offentlig klasse flaske. Offentlig brand som streng. Offentligt navn som streng. Offentlig kategori som streng. Offentlig størrelse som decimal. Public Sub New (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category Som streng, _. ByVal m_Size As Decimal) Mærke = m_Brand. Navn = m_Name. Kategori = m_Kategori. Størrelse = m_Size. Afslut under. Slutteklasse
instagram viewer

For at bygge kollektionen, Tilføje varerne. Dette er hvad der er i Formbelastning begivenhed:

Dim kabinet som liste (af flaske) = _. "Ny liste (af flaske) Skab. Tilføj (Ny flaske (_. "Castle Creek", _. "Uintah Blanc", _. "Vin", 750)) Skab. Tilføj (Ny flaske (_. "Zion Canyon Brewing Company", _. "Springdale Amber Ale", _. "Øl", 355)) Skab. Tilføj (Ny flaske (_. "Spanish Valley Vineyards", _. "Syrah", _. "Vin", 750)) Skab. Tilføj (Ny flaske (_. "Wasatch Beers", _. "Polygamy Porter", _. "Øl", 355)) Skab. Tilføj (Ny flaske (_. "Squatters Beer", _. "Provo Girl Pilsner", _. "Øl", 355))

Alle ovennævnte koder er standardkode i VB.NET 1.0. Bemærk dog, at ved at definere din egen Flaske objekt, får du fordelene ved flere typer i den samme samling (i dette tilfælde begge dele Snor og Decimal) og effektiv, sikker "sent binding".

Hvert eksempel

Det sjove starter, når vi bruger metoderne. For at begynde, lad os implementere det velkendte For hver metode. Microsoft-dokumentationen inkluderer denne brugssyntaksdefinition:

Dim instans som liste Dim handling som handling (af T) -forekomst. ForEach (handling)

Microsoft definerer yderligere handling som "delegere til en metode, der udfører en handling på det objekt, der er sendt til det. Elementerne i den aktuelle liste (T) overføres individuelt til handlingsdelegatten. "

Tip: Læs mere om delegerede Brug af delegerede i Visual Basic .NET til fleksibilitet i løbet af tiden.

Den første ting, du skal kode, er metoden, der vil blive delegeret. Misforståelse af dette ene centrale punkt er kilden til mest af forvirringen hos VB.NET-studerende. Denne funktion eller subroutine er det sted, hvor alle den tilpassede kodning for objekter af typen "Of" udføres.

Når du udføres korrekt, er du stort set færdig. Det er virkelig enkelt i dette første eksempel. En hel forekomst af Flaske passeres, og subroutinen vælger alt, hvad der er nødvendigt ud af det. Kodning af For hver selve er også enkel. Udfyld blot delegatens adresse ved hjælp af AddressOf metode.

UndervisningFlask (ByVal b som flaske) Resultatliste. Elementer. Tilføj (_ b. Brand & "-" & _ b. Navn & "-" & _ b. Kategori & "-" & _ b. Størrelse) End Sub Private Sub ForEachButton_Click (... Resultatlisten. Elementer. Ryd () Resultatliste. Elementer. Tilføj ("For hvert eksempel") Resultatliste. Elementer. Tilføj ("") kabinet. ForEach (AddressOf displayBottle) End Sub

FindAlle eksempler

Findall er lidt mere kompliceret. Microsoft-dokumentationen til Findall ser sådan ud:

Dim forekomst Som liste Dim match som predikat (af T) Dim returnValue As List (Of T) returnValue = instans. FindAlle (kamp)

Denne syntaks inkluderer et nyt element, Predikat (af T). Ifølge Microsoft vil dette repræsentere metoden ", der definerer et sæt kriterier og bestemmer, om det specificerede objekt opfylder disse kriterier. "Med andre ord kan du oprette en hvilken som helst kode, der finder noget i liste. Jeg kodede min Predikat (af T) at finde noget i "Øl" Kategori.

I stedet for at kalde delegationskoden for hvert element på listen, Findall returnerer en helhed Liste (T) der kun indeholder de matcher, der er resultatet af din Predikat (af T). Det er op til din kode at begge definere dette sekund Liste (T) og gør noget med det. Min kode tilføjer bare emnerne til a ListBox.

Privat sub FindAllButton_Click (ByVal afsender som system. Objekt, ByVal e As-system. EventArgs) håndterer FindAllButton. Klik på Resultatliste. Elementer. Ryd () Resultatliste. Elementer. Tilføj ("FindAll eksempel") Resultatliste. Elementer. Tilføj ("") Dim sublist som liste (af flaske) sublist = kabinet. FindAll (AddressOf findBeer) for hver r som flaske i sublist ResultatListe. Elementer. Tilføj (_ r. Brand & "-" & _ r. Navn & "-" & _ r. Kategori & "-" & _ r. Størrelse) Næste ende Underfunktion findBeer (ByVal b som flaske) _ Som boolsk hvis (b. Kategori = "Øl") Returner derefter True Else Return False End If End-funktion

Sorter eksempel

Den sidste metode denne artikel undersøger er Sortere. Igen bruger Microsoft nogle terminologier, du måske ikke er bekendt med. Der er faktisk fire forskellige overbelastninger af Sortere metode:

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

Dette giver dig mulighed for at bruge sorteringsmetoder, der er defineret i .NET Framework til listen, kode din egen, bruge et system defineret sammenligning for typen, eller sorter en del af samlingen ved hjælp af en startposition og tælling parameter.

I dette eksempel, da jeg bruger følgende syntaks til faktisk at udføre sorteringen, bruger jeg den tredje overbelastning.

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

Jeg har kodet en anden delegeret til min egen sammenligning. Da jeg vil sortere efter min Navn, Jeg trækker netop den værdi ud af hvert tilfælde af Flaske objekt, der er bestået, og brug Sorter (Sammenligning )>)). Det Sortere metode omorganiserer faktisk originalen Liste (T). Det er hvad der behandles efter metoden er udført.

Privat sub SortButton_Click (ByVal afsender som system. Objekt, ByVal e As-system. EventArgs) Håndterer SortButton. Klik på Resultatliste. Elementer. Ryd () Resultatliste. Elementer. Tilføj ("Sortér eksempel") Resultatliste. Elementer. Tilføj ("") kabinet. Sort (AddressOf sortCabinet) for hver r som flaske i kabinet Resultatliste. Elementer. Tilføj (_ r. Navn & "-" & _ r. Brand & "-" & _ r. Kategori & "-" & _ r. Størrelse) Next End Sub Private Shared Function sortCabinet (_ ByVal x As Bottle, ByVal y As Bottle) Som heltal Retur x. Navn. SammenlignTo (y. Navn) Slutfunktion

Disse metoder blev valgt til at demonstrere de vigtigste måder, som rammemetoderne fungerer på Liste (T) er faktisk kodet. Der er dog en hel række andre metoder. Det er det, der gør Liste (T) så nyttigt!

instagram story viewer