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!
Cod de pornire
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șa că puneți acest lucru la sfârșit:
Clasa publică sticlă. Public Brand As String. Denumire publică ca șir. Categorie publică ca șir. Dimensiunea publică ca zecimală. Sub public nou (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category As String, _. ByVal m_Size Ca zecimal) Brand = m_Brand. Nume = nume mn. Categorie = m_Categorie. Dimensiune = m_Dimensiune. Sub final. Clasa finală
Pentru a construi colecția, Adăuga obiectele. Aceasta este ceea ce este în Încărcarea formularului eveniment:
Dulap Dim ca listă (din sticlă) = _. "Lista nouă (de sticlă) Cabinet. Adăugați (sticlă nouă (_). "Castle Creek", _. "Uintah Blanc", _. "Vin", 750)) Cabinet. Adăugați (sticlă nouă (_). "Zion Canyon Brewing Company", _. "Springdale Amber Ale", _. "Bere", 355)) Cabinet. Adăugați (sticlă nouă (_). „Podgoriile din Valea Spaniei”, _. "Syrah", _. "Vin", 750)) Cabinet. Adăugați (sticlă nouă (_). "Wasatch Beers", _. "Poligamia Porter", _. "Bere", 355)) Cabinet. Adăugați (sticlă nouă (_). "Bere Squatters", _. "Provo Girl Pilsner", _. "Bere", 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ă”.
Exemplu ForEach
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). ForEach (acțiune)
Microsoft definește în continuare acțiune ca „delegare la o metodă care execută 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 despre delegați, citiți Utilizarea delegaților în 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 afișajBottle (ByVal b Ca sticlă) Rezultat Listă. Articole. Adăugați (_ b. Brand & "-" & _ b. Nume & "-" & _ b. Categorie & "-" & _ b. Mărime) End Sub Sub Private ForEachButton_Click (... ResultList. Articole. Șterge () Rezultat Lista. Articole. Adăugați („Pentru fiecare exemplu”) Rezultat Listă. Articole. Adăugați ("") dulap. ForEach (AddressOf displayBottle) End Sub
Exemplu FindAll
Găsiți toate este ceva mai complicat. Documentația Microsoft pentru Găsiți toate arata asa:
Dim instanță ca listă Dim potrivire ca predicat (de T) Dim returnValue ca listă (Of T) returnValue = instanță. FindAll (potrivire)
Această sintaxă include un element nou, Predicat (din T). Conform Microsoft, aceasta va reprezenta metoda "care definește un set de criterii și stabilește dacă obiectul specificat îndeplinește acele 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 sistem. Obiect, sistem ByVal e As. EventArgs) Mânere FindAllButton. Faceți clic pe Listă de rezultate. Articole. Șterge () Rezultat Lista. Articole. Adăugați („FindAll Exemple”) ResultList. Articole. Adăugați ("") Dim sublist ca lista (din sticlă) = listă. FindAll (AddressOf findBeer) Pentru fiecare r ca sticlă În sublistă Rezultat Listă. Articole. Adăugați (_ r. Brand & "-" & _ r. Nume & "-" & _ r. Categorie & "-" & _ r. Mărime) Următoarea Funcție finală findBeer (ByVal b As Bottle) _ As Boolean If (b. Categorie = "bere") Apoi, întoarceți adevărat altceva Întoarceți sfârșitul fals dacă funcția finală
Exemplu de sortare
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ă:
- Fel()
- Sortare (IComparer (T))
- Sortare (comparație (T))
- Sortare (Int32, Int32, IComparer (T))
Acest lucru vă permite să utilizați metode de sortare definite în .NET Framework pentru listă, să codați propriul dvs., să utilizați un sistem comparație definită pentru tipul sau sortarea unei părți din colecție folosind o poziție de pornire și un număr parametru.
În acest exemplu, din moment ce folosesc următoarea sintaxă pentru a efectua sortarea, folosesc a treia suprasarcină.
X. Name.x. Nume. CompareTo (y. Nume) (y. Nume)
Am codat un alt delegat la propriul meu comparator. De vreme ce vreau să le sortez după ale mele Nume, Scot doar acea valoare din fiecare instanță din Sticla obiect care este trecut și utilizați Sortare (comparație )>)). Fel metoda rearanjează de fapt originalul Lista (T). Asta este procesat după executarea metodei.
Private Sub SortButton_Click (expeditor ByVal ca sistem. Obiect, sistem ByVal e As. EventArgs) Gestionează SortButton. Faceți clic pe Listă de rezultate. Articole. Șterge () Rezultat Lista. Articole. Adăugați („Exemplu de sortare”) Rezultat Listă. Articole. Adăugați ("") dulap. Sortare (adresă de tipCabinet) pentru fiecare r ca sticlă în rezultatul cabinetului. Articole. Adăugați (_ r. Nume & "-" & _ r. Brand & "-" & _ r. Categorie & "-" & _ r. Mărime) Next End Sub Fun Private Shared sortCabinet (_ ByVal x As Bottle, ByVal y As Bottle) As Return Integer x. Nume. CompareTo (y. Nume) 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!