Generics rozšiřují sílu a flexibilitu VB.NET v mnoha oblastech, ale získáte větší výhody z výkonu a více možností programování v obecných Seznam předmět [Seznam (z T)] než s jakýmkoli jiným.
Použít Seznam (z T), musíte pochopit, jak implementovat mnoho metod, které poskytuje rozhraní .NET Framework. Níže jsou uvedeny tři příklady použití Pro každého, Najděte vše, a Seřadit, což ukazuje, jak obecné Seznam práce ve třídě.
Prvním krokem je vytvoření obecného Seznam. Data můžete získat mnoha způsoby, ale nejjednodušší je spravedlivé Přidat to. Následující kód ukazuje, jak klasifikovat moji sbírku piva a vína!
Startovací kód
Nejprve musí existovat objekt, který bude představovat láhev ze sbírky. V aplikaci Windows Forms musí být třída Form nejprve v souboru nebo návrhář Visual Studio nebude fungovat správně, takže to vložte na konec:
Láhev veřejné třídy. Veřejná značka jako řetězec. Veřejné jméno jako řetězec. Veřejná kategorie jako řetězec. Veřejná velikost jako desetinná. Public Sub New (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category As String, _. ByVal m_Size As Decimal) Značka = m_Brand. Jméno = m_Name. Kategorie = m_Kategorie. Velikost = m_Size. End Sub. Koncová třída
Chcete-li sestavit sbírku, Přidat předměty. To je to, co je v Načíst formulář událost:
Dim Cabinet As List (Of Bottle) = _. „Nový seznam (z láhve) Skříň. Přidat (nová láhev (_. "Castle Creek", _. "Uintah Blanc", _. „Víno“, 750)) Skříň. Přidat (nová láhev (_. "Zion Canyon Brewing Company", _. "Springdale Amber Ale", _. „Pivo“, 355)) Skříň. Přidat (nová láhev (_. "Spanish Valley Vineyards", _. "Syrah", _. „Víno“, 750)) Skříň. Přidat (nová láhev (_. "Wasatch Beers", _. "Polygamy Porter", _. „Pivo“, 355)) Skříň. Přidat (nová láhev (_. "Squatters Beer", _. "Provo Girl Pilsner", _. „Pivo“, 355))
Celý výše uvedený kód je standardní kód ve VB.NET 1.0. Všimněte si však, že definováním své vlastní Láhev objekt, získáte výhody více typů ve stejné sbírce (v tomto případě obojí Tětiva a Desetinný) a efektivní, typově bezpečný „pozdní vazba“.
Pro každý příklad
Zábava začíná, když použijeme metody. Začněme implementovat známé Pro každého metoda. Dokumentace společnosti Microsoft obsahuje tuto definici syntaxe použití:
Dim instance jako seznam Dim akce jako akce (Of T) instance. ForEach (akce)
Microsoft dále definuje akce jako „delegovat na metodu, která provádí akci na objektu, který jí byl předán. Prvky aktuálního seznamu (T) jsou jednotlivě předány delegátovi akce (T). “
Spropitné: Další informace o delegátech najdete v dokumentu Použití delegátů v jazyce Visual Basic .NET pro flexibilitu za běhu.
První věc, kterou musíte kódovat, je metoda, která bude delegována. Nepochopení tohoto jednoho klíčového bodu je zdrojem většina záměny studentů VB.NET. Tato funkce nebo podprogram je místem, kde se provádí veškeré přizpůsobené kódování pro objekty typu „Of“.
Při správném výkonu jste v podstatě hotovi. V tomto prvním příkladu je to opravdu jednoduché. Celá instance Láhev je předán a podprogram z něj vybere vše potřebné. Kódování Pro každého sám o sobě je také jednoduchý. Stačí vyplnit adresu delegáta pomocí AdresaOf metoda.
Sub displayBottle (ByVal b jako Bottle) ResultList. Položky. Přidat (_ b. Značka & "-" & _ b. Jméno & "-" & _ b. Kategorie & "-" & _ b. Velikost) End Sub Private Sub ForEachButton_Click (... Seznam výsledků. Položky. Vymazat () ResultList. Položky. Přidat ("pro každý příklad") ResultList. Položky. Přidat ("") skříňku. ForEach (AddressOf displayBottle) End Sub
Najít příklad
Najděte vše je trochu složitější. Dokumentace společnosti Microsoft pro Najděte vše vypadá takto:
Dim instance jako seznam Dim shoda jako predikát (z T) Dim returnValue jako seznam (z T) returnValue = instance. FindAll (match)
Tato syntaxe obsahuje nový prvek, Predikát (z T). Podle společnosti Microsoft to bude představovat metodu ", která definuje soubor kritérií a určuje, zda zadaný objekt splňuje tato kritéria. "Jinými slovy, můžete vytvořit libovolný kód, který najde něco v seznam. Zakódoval jsem své Predikát (z T) najít něco v "Pivu" Kategorie.
Místo volání kódu delegáta pro každou položku v seznamu, Najděte vše vrátí celek Seznam (T) obsahující pouze zápasy, které jsou výsledkem vaší Predikát (z T). Je na vašem kódu, abyste definovali tuto sekundu Seznam (T) a s tím něco udělat. Můj kód pouze přidá položky do Seznam.
Private Sub FindAllButton_Click (odesílatel ByVal jako systém. Objekt, ByVal e As System. EventArgs) zpracovává FindAllButton. Klikněte na Seznam výsledků. Položky. Vymazat () ResultList. Položky. Přidat („FindAll Example“) ResultList. Položky. Přidat ("") Dim sublist jako seznam (z láhve) sublist = Cabinet. FindAll (AddressOf findBeer) pro každé r jako láhev ve sublistu ResultList. Položky. Přidat (_ r. Značka & "-" & _ r. Jméno & "-" & _ r. Kategorie & "-" & _ r. Velikost) Další Konec Sub Funkce findBeer (ByVal b jako láhev) _ Jako booleovský If (b. Category = "Beer") Pak Return True Else Return False End If End Function
Příklad řazení
Poslední metoda, kterou tento článek zkoumá, je Seřadit. Microsoft opět používá nějakou terminologii, se kterou možná neznáte. Ve skutečnosti existují čtyři různá přetížení Seřadit metoda:
- Řadit ()
- Třídit (IComparer (T))
- Třídit (porovnání (T))
- Seřadit (Int32, Int32, IComparer (T))
To vám umožní použít metody řazení definované v rozhraní .NET Framework pro seznam, kódovat vlastní, používat systém definované porovnání typu nebo třídění části kolekce pomocí výchozí pozice a počtu parametr.
V tomto příkladu, protože používám následující syntaxi ke skutečnému provedení řazení, používám třetí přetížení.
X. Name.x. Název. PorovnatTo (y. Název) (y. Název)
Zakódoval jsem dalšího delegáta do svého vlastního srovnávače. Protože chci třídit podle mých název, Vytáhnu jen tuto hodnotu z každé instance Láhev objekt, který je předán a použijte Seřadit (porovnání )>))). Seřadit metoda skutečně přeskupuje originál Seznam (T). To je to, co je zpracováno po provedení metody.
Private Sub SortButton_Click (odesílatel ByVal jako systém. Objekt, ByVal e As System. EventArgs) Zpracovává SortButton. Klikněte na Seznam výsledků. Položky. Vymazat () ResultList. Položky. Přidat ("Příklad řazení") ResultList. Položky. Přidat ("") skříňku. Seřadit (AddressOf sortCabinet) pro každé r jako láhev v kabinetu ResultList. Položky. Přidat (_ r. Jméno & "-" & _ r. Značka & "-" & _ r. Kategorie & "-" & _ r. Velikost) Další konec Sub Soukromé sdílené funkce sortCabinet (_ ByVal x jako láhev, ByVal y jako láhev) jako celé číslo x. Název. PorovnatTo (y. Název) Konečná funkce
Tyto metody byly vybrány tak, aby demonstrovaly hlavní způsoby, kterými metody rámcových metod v roce 2007 byly Seznam (T) jsou ve skutečnosti kódovány. Existuje však celá řada dalších metod. To je to, co dělá Seznam (T) tak užitečné!