I generici estendono la potenza e la flessibilità di VB.NET in molte aree, ma si ottengono maggiori vantaggi in termini di prestazioni e più opzioni di programmazione in generale Elenco oggetto [Elenco (di T)] rispetto a qualsiasi altro.
Usare Elenco (di T), devi capire come implementare i numerosi metodi forniti da .NET Framework. Di seguito sono riportati tre esempi di utilizzo Per ciascuno, Trova tutto, e Ordinare, ciò dimostra come il generico Elenco opere di classe.
Il primo passo è creare un generico Elenco. Puoi ottenere i dati in molti modi, ma il più semplice è semplicemente Inserisci esso. Il codice seguente mostra come classificare la mia collezione di birra e vino!
Per prima cosa deve esserci un oggetto che rappresenterà una bottiglia della collezione. In un'applicazione Windows Form, la classe Form deve essere prima in un file o il designer di Visual Studio non funzionerà correttamente, quindi mettilo alla fine:
Bottiglia di classe pubblica Marca pubblica come stringa Nome pubblico come stringa Categoria pubblica come stringa Dimensione pubblica come decimale Pubblico secondario Nuovo (_ ByVal m_Brand come stringa, _ ByVal m_Name come stringa, _ ByVal m_Categoria come stringa, _ ByVal m_Size come decimale) Marca = m_Brand Nome = m_Name Categoria = m_Category Dimensione = m_Size End Sottotipo End
Per costruire la collezione, Inserisci gli oggetti. Questo è ciò che è in Caricamento modulo evento:
Dim Cabinet As List (Of Bottle) = _ "Nuovo elenco (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 (Nuova bottiglia (_ "Spanish Valley Vineyards", _ "Syrah", _ "Wine", 750) ) Cabinet.Add (Nuova bottiglia (_ "Wasatch Beers", _ "Polygamy Porter", _ "Beer", 355)) Cabinet.Add (New Bottle (_ "Squatters Beer", _ "Provo Girl Pilsner", _ " Birra ", 355))
Tutto il codice sopra è un codice standard in VB.NET 1.0. Tuttavia, si noti che definendo il proprio Bottiglia Oggetto, ottieni i vantaggi di più tipi nella stessa raccolta (in questo caso, entrambi Corda e Decimale) ed efficiente, digita "late binding" sicuro.
Il divertimento inizia quando usiamo i metodi. Per iniziare, implementiamo il familiare Per ciascuno metodo. La documentazione di Microsoft include questa definizione di sintassi di utilizzo:
Dim istanza come elenco Dim azione come azione (Of T) instance.ForEach (azione)
Microsoft definisce ulteriormente azione come "delegare a un metodo che esegue un'azione sull'oggetto passato ad esso. Gli elementi dell'elenco corrente (T) vengono passati individualmente al delegato azione (T)."
Mancia: Per ulteriori informazioni sui delegati, leggi Utilizzo dei delegati in Visual Basic .NET per flessibilità di runtime.
La prima cosa che devi codificare è il metodo che verrà delegato. Fraintendere questo punto chiave è la fonte di maggior parte della confusione degli studenti VB.NET. Questa funzione, o subroutine, è dove viene eseguita tutta la codifica personalizzata per gli oggetti di tipo "Of".
Se eseguito correttamente, il gioco è fatto. È davvero semplice in questo primo esempio. Un'intera istanza di Bottiglia viene passato e la subroutine seleziona qualsiasi elemento necessario da esso. Coding the Per ciascuno è di per sé semplice. Basta inserire l'indirizzo del delegato usando il AddressOf metodo.
Display secondario Bottone (ByVal b come bottiglia) ResultList.Items.Add (_ b.Brand & "-" & _ b.Name & "-" & _ b.Category & "-" & _ b.Size) End Sub Private Sub ForEachButton_Click (... ResultList.Items.Clear () ResultList.Items.Add ("Per ogni esempio") ResultList.Items.Add ("--------------------- - ") Cabinet.ForEach (AddressOf displayBottle) End Sub
Trova tutto è un po 'più complicato. La documentazione di Microsoft per Trova tutto Somiglia a questo:
Dim istanza come elenco Dim corrispondenza come predicato (Of T) Dim returnValue As List (Of T) returnValue = instance.FindAll (match)
Questa sintassi include un nuovo elemento, Predicato (di T). Secondo Microsoft, ciò rappresenterà il metodo "che definisce un insieme di criteri e determina se l'oggetto specificato soddisfa tali criteri". In altre parole, puoi creare qualsiasi codice che trovi qualcosa nell'elenco. Ho codificato il mio Predicato (di T) trovare qualcosa nella "Birra" Categoria.
Invece di chiamare il codice delegato per ciascun elemento nell'elenco, Trova tutto restituisce un intero List (T) contenente solo le partite che risultano dal tuo Predicato (di T). Sta al tuo codice definire entrambi in questo secondo List (T) e farci qualcosa. Il mio codice aggiunge semplicemente gli elementi a ListBox.
Sottotitolo privato FindAllButton_Click (mittente ByVal come System.Object, ByVal e As System.EventArgs) Gestisce FindAllButton.Click ResultList.Items.Clear () ResultList.Items.Add ("Esempio FindAll") ResultList.Items.Add ("--- -------------------- ") Sottomenu Dim Elenco come elenco (di bottiglia) sottoelenco = Cabinet.FindAll (AddressOf findBeer) per ogni r Come bottiglia in lista secondaria ResultList.Items. Aggiungi (_r.Brand & "-" & _ r.Name & "-" & _ r.Category & "-" & _ r.Size) Next End Sottotitolo findBeer (ByVal b As Bottle) _ As Boolean If ( b.Category = "Beer") Quindi restituisce True Else Restituisce False End If End Function
Il metodo finale che questo articolo esamina è Ordinare. Ancora una volta, Microsoft utilizza una terminologia che potrebbe non essere familiare. In realtà ci sono quattro diversi sovraccarichi di Ordinare metodo:
Ciò consente di utilizzare i metodi di ordinamento definiti in .NET Framework per l'elenco, codificare i propri, utilizzare un confronto definito dal sistema per il tipo o ordinare parte della raccolta utilizzando una posizione iniziale e il parametro count.
In questo esempio, poiché utilizzo la sintassi seguente per eseguire effettivamente l'ordinamento, sto utilizzando il terzo sovraccarico.
x.Name.x.Name.CompareTo (y.Name) (y.Name)
Ho codificato un altro delegato sul mio comparatore. Dal momento che voglio ordinare in base al mio Nome, Prendo proprio quel valore da ogni istanza di Bottiglia oggetto che viene passato e utilizzare il Sort (Confronto<(Of )>)). Il Ordinare il metodo in realtà riorganizza l'originale List (T). Questo è ciò che viene elaborato dopo l'esecuzione del metodo.
Sottotitolo privato SortButton_Click (mittente ByVal come System.Object, ByVal e As System.EventArgs) Gestisce SortButton.Click ResultList.Items.Clear () ResultList.Items.Add ("Ordina esempio") ResultList.Items.Add ("--- -------------------- ") Cabinet.Sort (AddressOf sortCabinet) Per ogni r come Bottle In Cabinet ResultList.Items.Add (_ r.Name &" - " & _ r.Brand & "-" & _ r.Category & "-" & _ r.Size) Next End Sub Private Shared Function sortCabinet (_ ByVal x As Bottle, ByVal y As Bottle) Come Intero Return x.Name. CompareTo (y.Name) End Function
Questi metodi sono stati selezionati per dimostrare i principali modi in cui i metodi Framework sono inclusi List (T) sono effettivamente codificati. C'è comunque una miriade di altri metodi. Questo è ciò che rende List (T) così utile!