Generics extinde puterea și flexibilitatea VB.NET într-o mulțime de domenii, dar obțineți un beneficiu mai mare de performanță și mai multe opțiuni de programare în cele generice Listă obiect [Lista (de T)] decât cu oricare altul.
A folosi Lista (de T), trebuie să înțelegeți cum să implementați numeroasele metode pe care le oferă .NET Framework. Mai jos sunt trei exemple folosind Pentru fiecare, Găsiți toate, și Fel, asta demonstrează modul în care genericul Listă lucrări de clasă.
Primul pas este crearea unui generic Listă. Puteți obține datele în mai multe moduri, dar cel mai simplu este doar Adăuga aceasta. Codul de mai jos arată cum pot clasifica colecția mea de bere și vin!
Mai întâi trebuie să existe un obiect care să reprezinte o sticlă din colecție. Într-o aplicație Windows Forms, clasa Form trebuie să fie mai întâi într-un fișier sau designerul Visual Studio nu va funcționa corect, așadar puneți acest lucru la sfârșit:
Public Class Bottle Public Brand As String Denumire publică As String Categorie publică As String Dimensiune publică Public Decimal Sub New (_ ByVal m_Brand As String, _ ByVal m_Name As String, _ ByVal m_Category As String, _ ByVal m_Size As Decimal) Brand = m_Brand Nume = m_Name Categorie = m_Categorie Mărime = m_Mărime Clasa de finalizare sub-dimensiune
Pentru a construi colecția, Adăuga obiectele. Aceasta este ceea ce este în Încărcarea formularului eveniment:
Cabinet Dim. As List (Of Bottle) = _ "New List (Of Bottle) Cabinet.Add (New Bottle (_" Castle Creek ", _" Uintah Blanc ", _" Wine ", 750)) Cabinet.Add (New Bottle (_ "Zion Canyon Brewing Company", _ "Springdale Amber Ale", _ "Beer", 355) Cabinet.Add (New Bottle (_ "Spanish Valley Vineyards", _ "Syrah", _ "Wine", 750) ) Cabinet.Add (New Bottle (_ "Wasatch Beers", _ "Polygamy Porter", _ "Beer", 355)) Cabinet.Add (New Bottle (_ "Squatters Beer", _ "Provo Girl Pilsner", _ " Berea ", 355))
Tot codul de mai sus este codul standard în VB.NET 1.0. Cu toate acestea, rețineți că prin definirea propriei dvs. Sticla obiect, obțineți beneficiile mai multor tipuri în aceeași colecție (în acest caz, ambele Şir și Zecimal) și eficient și de tip „legare tardivă”.
Distracția începe atunci când folosim metodele. Pentru a începe, să punem în aplicare familiar Pentru fiecare metodă. Documentația Microsoft include această definiție a sintaxei de utilizare:
Instanță Dim ca listă Acțiune Dim ca acțiune (Of T) instanță.ForEach (acțiune)
Microsoft definește în continuare acțiune ca "delegat la o metodă care efectuează o acțiune asupra obiectului care i-a fost transmis. Elementele listei curente (T) sunt transmise individual delegatului de acțiune (T)."
Bacsis: Pentru mai multe informații despre delegați, citiți Utilizarea delegaților din Visual Basic .NET pentru flexibilitatea Runtime.
Primul lucru pe care trebuie să îl codificați este metoda care va fi delegată. Înțelegerea greșită a acestui punct cheie este sursa cel mai a confuziei studenților VB.NET. Această funcție sau subrutină este locul în care se realizează toate codările personalizate pentru obiectele de tip „Of”.
Când sunteți executat corect, ați terminat în esență. Este foarte simplu în acest prim exemplu. O întreagă instanță a Sticla este trecută și subrutina selectează orice este necesar din aceasta. Codificarea codului Pentru fiecare în sine este și simplu. Trebuie doar să completați adresa delegatului folosind AddressOf metodă.
Sub displayBottle (ByVal b As Bottle) ResultList.Items.Add (_ b.Brand & "-" & _ b.Name & "-" & _ b.Category & "-" & _ b.Size) End Sub Sub Private ForEachButton_Click (... ResultList.Items.Clear () ResultList.Items.Add ("Pentru fiecare exemplu") ResultList.Items.Add ("--------------------- - ") Cabinet.ForEach (AddressOf displayBottle) End Sub
Găsiți toate este ceva mai complicat. Documentația Microsoft pentru Găsiți toate arata asa:
Dim instance ca listă Dim match as Predicate (Of T) Dim returnValue As List (Of T) returnValue = instance.FindAll (match)
Această sintaxă include un element nou, Predicat (din T). Conform Microsoft, aceasta va reprezenta metoda „care definește un set de criterii și determină dacă obiectul specificat îndeplinește aceste criterii”. Cu alte cuvinte, puteți crea orice cod care va găsi ceva în listă. Mi-am codat-o Predicat (din T) pentru a găsi orice în „Berea” Categorie.
În loc să sunați codul delegat pentru fiecare articol din listă, Găsiți toate returnează un întreg Lista (T) conținând doar potrivirile care rezultă din dvs. Predicat (din T). Depinde de codul dvs. pentru a defini ambele secunde Lista (T) și fă ceva cu ea. Codul meu doar adaugă elementele la o ListBox.
Sub Sub FindAllButton_Click (expeditor ByVal ca System.Object, ByVal e As System.EventArgs) Manerele FindAllButton.Click ResultList.Items.Clear () ResultList.Items.Add ("Exemplu FindAll") ResultList.Items.Add ("--- -------------------- ") Dim sublist As ca List (Of Bottle) sublist = Cabinet.FindAll (AddressOf findBeer) Pentru fiecare r Ca sticlă În sublistă ResultList.Items. Adăugați (_ r.Brand & "-" & _ r.Nume & "-" & _ r.Categorie & "-" & _ r.Size) Următoarea funcție finală findBeer (ByVal b As Bottle) _ As Boolean If ( b.Categorie = "Beră") Apoi, întoarceți adevărat în rest
Ultima metodă pe care o examinează acest articol este Fel. Din nou, Microsoft folosește o terminologie cu care s-ar putea să nu vă familiarizați. Există de fapt patru suprasarcini diferite ale Fel metodă:
Acest lucru vă permite să utilizați metode de sortare definite în .NET Framework pentru listă, să codați propriul dvs., să utilizați o comparație definită pentru sistem pentru tipul sau să sortați o parte din colecție folosind un parametru de poziție și de numărare..
În acest exemplu, din moment ce folosesc următoarea sintaxă pentru a efectua sortarea, folosesc a treia suprasarcină.
x.Name.x.Name.CompareTo (y.Name) (y.Name)
Am codat un alt delegat la propriul meu comparator. De vreme ce vreau să le sortez după ale mele Nume, Scoate doar acea valoare din fiecare instanță din Sticla obiect care este trecut și utilizați Sort (Comparație<(Of )>)). Fel metoda rearanjează de fapt originalul Lista (T). Asta este procesat după executarea metodei.
Subunitate privată SortButton_Click (expeditor ByVal ca System.Object, ByVal e As System.EventArgs) Manevre SortButton.Click ResultList.Items.Clear () ResultList.Items.Add ("Exemplu de sortare") ResultList.Items.Add ("--- -------------------- ") Cabinet.Sort (AddressOf sortCabinet) Pentru fiecare r ca sticlă în cabinet ResultList.Items.Add (_r.Name &" - " & _ r.Brand & "-" & _ r.Category & "-" & _ r.Size) Next End Sub Sub Private Shared Function ClassCabinet (_ ByVal x As Bottle, ByVal and As Bottle) As Return Integer x.Name. CompareTo (y.Name) Funcție finală
Aceste metode au fost selectate pentru a demonstra modalitățile majore în care sunt utilizate metodele cadru Lista (T) sunt de fapt codificate. Cu toate acestea, există o plută întreagă de alte metode. Asta face Lista (T) atât de util!