Generički povećavaju snagu i fleksibilnost VB.NET-a na mnogim područjima, ali dobivate veću korist od performansi i više mogućnosti programiranja u generičkim okvirima Popis objekt [Popis (od T)] nego s bilo kojim drugim.
Koristiti Popis (od T), morate razumjeti kako implementirati mnoge metode koje pruža .NET Framework. Ispod su tri primjera korištenja Za svakoga, FindAll, i Sortirati, to pokazuje kako generičko Popis razredna djela.
Prvi korak je stvaranje općenito Popis. Možete dobiti podatke na mnogo načina, ali najjednostavniji je to pravedan Dodati to. Šifra u nastavku pokazuje kako razvrstati svoju kolekciju piva i vina!
Početni kod
Tu prvo treba postojati predmet koji će predstavljati bocu iz kolekcije. U aplikaciji Windows Forms klasa obrasca prvo mora biti u datoteci ili dizajner Visual Studio neće raditi ispravno, pa stavite to na kraj:
Boca javne klase. Javna marka kao gudač. Javno ime kao string. Javna kategorija kao gudački. Javna veličina kao decimalna. Javno pod novo (_. ByVal m_Brand Kao niz, _. ByVal m_Name Kao niz, _. ByVal m_kategorija As String, _. ByVal m_Size Kao decimalno) Robna marka = m_Brand. Naziv = m_Name. Kategorija = m_kategorija. Veličina = m_Veličina. Kraj Sub. Krajnja klasa
Da biste napravili kolekciju, Dodati predmeti. To je ono što je u Učitavanje obrasca događaj:
Dimni ormar kao popis (boca) = _. "Novi popis (boca) Kabinet. Dodaj (Nova boca (_. "Castle Creek", _. "Uintah Blanc", _. "Vino", 750)) Kabinet. Dodaj (Nova boca (_. "Tvrtka za uzgoj kanjona Zion", _. "Springdale Amber Ale", _. "Pivo", 355)) Kabinet. Dodaj (Nova boca (_. "Španjolski vinogradi u dolini", _. "Syrah", _. "Vino", 750)) Kabinet. Dodaj (Nova boca (_. "Wasatch piva", _. "Poligamni porter", _. "Pivo", 355)) Kabinet. Dodaj (Nova boca (_. "Pivo u tikvicama", _. "Provo Girl Pilsner", _. "Pivo", 355))
Svi gore navedeni kod standardni je kod VB.NET 1.0. Međutim, imajte na umu da definiranjem vlastitog Boca objekta, imate prednosti više vrsta u istoj kolekciji (u ovom slučaju oboje Niz i Decimal) i učinkovito, upišite sigurno "kasno vezivanje".
Primjer ForEach
Zabava započinje kada koristimo metode. Za početak, provedimo ono poznato Za svakoga metoda. Microsoftova dokumentacija uključuje ovu definiciju upotrebe sintakse:
Dim primjer kao List Dim akcija kao akcija (Of T). ForEach (akcija)
Microsoft dalje definira radnja kao "delegat na metodu koja izvodi radnju na objektu prosljeđenom na njega. Elementi trenutnog Popisa (T) pojedinačno se prosljeđuju delegatu Akcije (T). "
Savjet: Više o delegatima pročitajte Korištenje delegata u Visual Basic. NET za fleksibilnost rada.
Prvo što trebate kodirati je metoda koja će biti delegirana. Izvor je nerazumijevanja ove ključne točke najviše zbrke studenata VB.NET-a. Ova funkcija ili podprogram gdje se vrši sve prilagođeno kodiranje objekata tipa "Of".
Kad se pravilno izvodi, u suštini ste gotovi. Stvarno je jednostavno u ovom prvom primjeru. Čitava instanca Boca se podnosi i podprogram odabire sve što je potrebno iz njega. Kodiranje Za svakoga I sama je jednostavna. Samo ispunite adresu delegata koristeći AddressOf metoda.
Sub displayBottle (ByVal b As Bottle) Rezultat popisa. Stavke. Dodaj (_ b. Robna marka & "-" & _ b. Ime & "-" & _ b. Kategorija & "-" & _ b. Veličina) Kraj Sub Privatni Sub ForEachButton_Click (... ResultList. Stavke. Izbriši () Rezultat popisa. Stavke. Dodajte ("Za svaki primjer") ResultList. Stavke. Dodajte ("") kabinet. ForEach (AddressOf displayBottle) Kraj Sub
FindAll Example
FindAll malo je složenije. Microsoftova dokumentacija za FindAll izgleda ovako:
Dim primjer kao list Dim se podudara s predikatom (od T) Dim returnValue As List (Od T) returnValue = instanca. FindAll (podudaranje)
Ta sintaksa uključuje novi element, Predikat (od T). Prema Microsoftu, ovo će predstavljati metodu "koja definira skup kriterija i određuje je li određeni objekt zadovoljava te kriterije. "Drugim riječima, možete stvoriti bilo koji kod koji će nešto pronaći u popis. Ja sam kodirao svoje Predikat (od T) pronaći nešto u "Pivu" Kategorija.
Umjesto pozivanja delegatskog koda za svaku stavku na popisu, FindAll vraća cjelinu Popis (T) koji sadrže samo podudaranja koja su rezultat vašeg rezultata Predikat (od T). Na vašem kôdu je da oboje definirate ovu sekundu Popis (T) i učinite nešto s tim. Moj kod upravo dodaje stavke u listbox.
Private Sub FindAllButton_Click (ByVal pošiljatelj kao sustav. Objekt, ByVal e kao sustav. EventArgs) rukuje FindAllButton. Kliknite ResultList. Stavke. Izbriši () Rezultat popisa. Stavke. Dodajte ("FindAll Example") Rezultat popisa. Stavke. Dodajte ("") dim podpis kao popis (boca) podpis = kabinet. FindAll (AddressOf findBeer) za svaki r As Bottle u popisu ResultList. Stavke. Dodaj (_ r. Robna marka & "-" & _ r. Naziv & "-" & _ r. Kategorija & "-" & _ r. Veličina) Sljedeći kraj potfunkcija findBeer (ByVal b kao boca) _ Kao boole If (b. Kategorija = "Pivo") Zatim vratite True Else Return False End ako završi funkciju
Primjer sortiranja
Posljednja metoda koju ovaj članak ispituje je Sortirati. Microsoft opet koristi neku terminologiju koja možda nije poznata. Zapravo postoje četiri različita preopterećenja Sortirati metoda:
- Sortirati()
- Poredaj (IComparer (T))
- Poredaj (Usporedba (T))
- Poredaj (Int32, Int32, IComparer (T))
To vam omogućuje korištenje metoda sortiranja definiranih u .NET Framework za popis, kodiranje vlastitih, korištenje sustava definirana usporedba za vrstu ili sortiranje dijela kolekcije pomoću početnog položaja i brojanja parametar.
U ovom primjeru, budući da sljedeću sintaksu koristim za izvršavanje vrste, koristim treće preopterećenje.
x. Name.x. Ime. UsporediteT (y. Naziv) (y. Ime)
Šifrirao sam drugog izaslanika u vlastitoj usporednici. Budući da želim sortirati po svom Ime, Izvučem upravo tu vrijednost iz svake instance Boca objekta koji je proslijeđen i koristi se Poredaj (Usporedba )>)). Sortirati metoda zapravo preuređuje izvornik Popis (T). To je ono što se obrađuje nakon izvršenja metode.
Private Sub SortButton_Click (ByVal pošiljatelj kao sustav. Objekt, ByVal e kao sustav. EventArgs) Rukuje SortButton. Kliknite ResultList. Stavke. Izbriši () Rezultat popisa. Stavke. Dodaj ("Primer sortiranja") ResultList. Stavke. Dodajte ("") kabinet. Poredaj (AddressOf sortCabinet) za svaki r kao bocu u ResultList kabineta. Stavke. Dodaj (_ r. Naziv & "-" & _ r. Robna marka & "-" & _ r. Kategorija & "-" & _ r. Veličina) Sljedeći kraj Pod privatna funkcija zajedničke vrsteKabinet (_ ByVal x Kao boca, ByVal y Kao boca) Kao Povratak cijelog broja x. Ime. UsporediteT (y. Naziv) Završna funkcija
Ove su metode odabrane kako bi pokazale glavne načine na koje su metode Okvirne Popis (T) su zapravo kodirani. No postoji čitav niz drugih metoda. To je ono što čini Popis (T) tako korisno!