Generics rozszerza moc i elastyczność VB.NET w wielu obszarach, ale zyskujesz większą wydajność i więcej opcji programowania w ogóle Lista obiekt [Lista (z T)] niż z jakimkolwiek innym.
Używać Lista (z T), musisz zrozumieć, jak zaimplementować wiele metod udostępnianych przez platformę .NET Framework. Poniżej znajdują się trzy przykłady użycia Dla każdego, Znajdź wszystko, i Sortować, co pokazuje, jak ogólny Lista prace klasowe.
Pierwszym krokiem jest stworzenie ogólnego Lista. Możesz uzyskać dane na wiele sposobów, ale najprostszym jest po prostu Dodaj to. Poniższy kod pokazuje, jak sklasyfikować moją kolekcję piwa i wina!
Kod początkowy
Najpierw musi być obiekt, który będzie reprezentował butelkę z kolekcji. W aplikacji Windows Forms klasa Form musi najpierw znajdować się w pliku, inaczej projektant Visual Studio nie będzie działał poprawnie, więc umieść to na końcu:
Butelka klasy publicznej. Marka publiczna jako ciąg. Nazwa publiczna jako ciąg. Kategoria publiczna jako ciąg. Rozmiar publiczny jako dziesiętny. Subwoofer publiczny Nowy (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category As String, _. ByVal m_Size As Decimal) Marka = m_Brand. Imię = m_nazwa. Kategoria = m_Kategoria. Rozmiar = m_Size. Napis końcowy. Klasa końcowa
Aby zbudować kolekcję, Dodaj przedmioty. Oto, co jest w Formularz ładowania zdarzenie:
Dim Cabinet As List (Of Bottle) = _. „Nowa lista (butelki) Gabinet. Dodaj (Nowa butelka (_. „Castle Creek”, _. „Uintah Blanc”, _. „Wino”, 750)) Gabinet. Dodaj (Nowa butelka (_. „Zion Canyon Brewing Company”, _. „Springdale Amber Ale”, _. „Piwo”, 355)) Gabinet. Dodaj (Nowa butelka (_. „Spanish Valley Vineyards”, _. „Syrah”, _. „Wino”, 750)) Gabinet. Dodaj (Nowa butelka (_. „Wasatch Beers”, _. „Poligamia Porter”, _. „Piwo”, 355)) Gabinet. Dodaj (Nowa butelka (_. „Squatters Beer”, _. „Provo Girl Pilsner”, _. „Piwo”, 355))
Cały powyższy kod jest standardowym kodem w VB.NET 1.0. Pamiętaj jednak, że definiując własne Butelka obiekt, zyskujesz zalety wielu typów w tej samej kolekcji (w tym przypadku oba Strunowy i Dziesiętny) i skuteczne, bezpieczne „późne wiązanie”.
ForEach Przykład
Zabawa zaczyna się, gdy używamy metod. Na początek zaimplementuj znajomy Dla każdego metoda. Dokumentacja Microsoft zawiera tę definicję składni użycia:
Przerwij instancję jako listę Przerwij akcję jako instancję akcji (Of T). ForEach (akcja)
Microsoft określa dalej akcja jako „deleguj do metody, która wykonuje akcję na przekazanym do niej obiekcie. Elementy bieżącej listy (T) są indywidualnie przekazywane do delegata akcji (T). ”
Wskazówka: Aby uzyskać więcej informacji na temat delegatów, przeczytaj Korzystanie z delegatów w programie Visual Basic .NET dla elastyczności środowiska wykonawczego.
Pierwszą rzeczą, którą musisz zakodować, jest metoda, która zostanie delegowana. Niezrozumienie tego jednego kluczowego punktu jest źródłem większość zamieszania studentów VB.NET. W tej funkcji lub podprogramie wykonywane jest całe niestandardowe kodowanie obiektów typu „Of”.
Prawidłowe wykonanie jest zasadniczo zakończone. To jest naprawdę proste w tym pierwszym przykładzie. Cała instancja pliku Butelka jest przekazywany, a podprogram wybiera z niego wszystko, co jest potrzebne. Kodowanie Dla każdego sama też jest prosta. Wystarczy wypełnić adres delegata, używając Adres metoda.
Sub displayBottle (ByVal b As Bottle) ResultList. Przedmiotów. Dodaj (_ b. Marka i „-” i _ b. Imię i „-” i _ b. Kategoria i „-” i _ b. Rozmiar) End Sub Private Sub ForEachButton_Click (... ResultList. Przedmiotów. Clear () ResultList. Przedmiotów. Dodaj („For Each Example”) ResultList. Przedmiotów. Dodaj szafkę („”). ForEach (AddressOf displayBottle) End Sub
FindAll Przykład
Znajdź wszystko jest trochę bardziej skomplikowane. Dokumentacja Microsoft dla Znajdź wszystko wygląda tak:
Dim instance As List Dim match As Predicate (Of T) Dim returnValue As List (Of T) returnValue = instancja. FindAll (dopasowanie)
Ta składnia zawiera nowy element, Predykat (z T). Według Microsoft będzie to reprezentować metodę, która określa zestaw kryteriów i określa, czy określony obiekt spełnia te kryteria. ”Innymi słowy, możesz utworzyć dowolny kod, który znajdzie coś w lista. Zakodowałem swój Predykat (z T) znaleźć coś w „Piwie” Kategoria.
Zamiast wywoływać kod delegowany dla każdego elementu na liście, Znajdź wszystko zwraca całość Lista (T) zawierający tylko dopasowania, które wynikają z twojego Predykat (z T). Określenie tej sekundy zależy od twojego kodu Lista (T) i zrób coś z tym. Mój kod po prostu dodaje elementy do Skrzynka na listy.
Private Sub FindAllButton_Click (ByVal nadawca jako system. Obiekt, ByVal e As System. EventArgs) Obsługuje FindAllButton. Kliknij ResultList. Przedmiotów. Clear () ResultList. Przedmiotów. Dodaj („FindAll Example”) ResultList. Przedmiotów. Dodaj („”) Dim sublist As List (Of Bottle) sublist = Cabinet. FindAll (AddressOf findBeer) For Each r As Bottle In sublist ResultList. Przedmiotów. Dodaj (_ r. Marka i „-” i _ r. Nazwa i „-” i _ r. Kategoria i „-” i _ r. Rozmiar) Następna funkcja podrzędna findBeer (ByVal b As Bottle) _ As Boolean If (b. Kategoria = „Piwo”) Następnie zwróć True Inna Zwróć Fałszywy koniec, jeśli funkcja końca
Przykład sortowania
Ostatnią metodą, którą bada ten artykuł Sortować. Ponownie Microsoft stosuje terminologię, której możesz nie znać. Istnieją cztery różne przeciążenia Sortować metoda:
- Sortować()
- Sortuj (IComparer (T))
- Sortuj (porównanie (T))
- Sortuj (Int32, Int32, IComparer (T))
To pozwala ci używać metod sortowania zdefiniowanych w .NET Framework dla listy, kodować własne, używać systemu zdefiniowane porównanie dla typu lub posortuj część kolekcji przy użyciu pozycji początkowej i liczby parametr.
W tym przykładzie, ponieważ do wykonania sortowania używam następującej składni, używam trzeciego przeciążenia.
x. Nazwa.x. Nazwa. CompareTo (y. Imię) (y. Nazwa)
Zakodowałem innego delegata do mojego własnego urządzenia porównującego. Ponieważ chcę sortować według moich Nazwa, Wyciągam tylko tę wartość z każdego wystąpienia Butelka obiekt, który jest przekazywany i użyj Sortuj (porównanie )>)). The Sortować metoda faktycznie przestawia oryginał Lista (T). To jest przetwarzane po wykonaniu metody.
Private Sub SortButton_Click (ByVal nadawca jako system. Obiekt, ByVal e As System. EventArgs) Obsługuje SortButton. Kliknij ResultList. Przedmiotów. Clear () ResultList. Przedmiotów. Dodaj („Przykład sortowania”) ResultList. Przedmiotów. Dodaj szafkę („”). Sortuj (AddressOf sortCabinet) Dla każdego r As Bottle In Cabinet ResultList. Przedmiotów. Dodaj (_ r. Nazwa i „-” i _ r. Marka i „-” i _ r. Kategoria i „-” i _ r. Rozmiar) Następny koniec Sub Prywatna funkcja dzielona sortCabinet (_ ByVal x As Bottle, ByVal y As Bottle) As Integer Return x. Nazwa. CompareTo (y. Nazwa) Funkcja zakończenia
Te metody zostały wybrane, aby zademonstrować główne sposoby, w jakie metody Framework Lista (T) są faktycznie zakodowane. Istnieje jednak cała masa innych metod. To sprawia, że Lista (T) bardzo przydatne!