Les génériques étendent la puissance et la flexibilité de VB.NET dans de nombreux domaines, mais vous obtenez un plus grand avantage de performances et plus d'options de programmation dans le générique liste objet [Liste (de T)] qu'avec tout autre.
Utiliser Liste (de T), vous devez comprendre comment implémenter les nombreuses méthodes fournies par le .NET Framework. Voici trois exemples d'utilisation Pour chaque, Trouver tout, et Trier, qui montre comment le générique liste travaux de classe.
La toute première étape consiste à créer un générique liste. Vous pouvez obtenir les données de nombreuses manières, mais le plus simple est de simplement Ajouter il. Le code ci-dessous montre comment classer ma collection de bières et vins!
Il doit d'abord y avoir un objet qui représentera une bouteille de la collection. Dans une application Windows Forms, la classe Form doit d'abord être dans un fichier ou le concepteur Visual Studio ne fonctionnera pas correctement, alors mettez ceci à la fin:
Public Class Bottle Marque publique As String Nom public As String Catégorie publique As String Taille publique As Decimal Public Sub New (_ ByVal m_Brand As String, _ ByVal m_Name As String, _ ByVal m_Category As String, _ ByVal m_Size As Decimal) Brand = m_Brand Name = m_Name Category = m_Category Size = m_Size End Sub End Class
Pour construire la collection, Ajouter Les objets. C'est ce qui est dans le Chargement de formulaire un événement:
Dim Cabinet As List (Of Bottle) = _ "New List (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 (New Bottle (_ "Spanish Valley Vineyards", _ "Syrah", _ "Wine", 750) ) Cabinet.Add (Nouvelle bouteille (_ "Wasatch Beers", _ "Polygamy Porter", _ "Beer", 355)) Cabinet.Add (Nouvelle bouteille (_ "Squatters Beer", _ "Provo Girl Pilsner", _ " Bière ", 355))
Tout le code ci-dessus est un code standard dans VB.NET 1.0. Cependant, notez qu'en définissant votre propre Bouteille , vous bénéficiez des avantages de plusieurs types dans la même collection (dans ce cas, les deux Chaîne et Décimal) et efficace, tapez "liaison tardive" sûre.
Le plaisir commence lorsque nous utilisons les méthodes. Pour commencer, implémentons le familier Pour chaque méthode. La documentation Microsoft inclut cette définition de syntaxe d'utilisation:
Dim instance As List Action Dim As Action (Of T) instance.ForEach (action)
Microsoft définit davantage action en tant que "délégué à une méthode qui exécute une action sur l'objet qui lui est transmis. Les éléments de la liste (T) actuelle sont transmis individuellement au délégué Action (T)".
Pointe: Pour plus d'informations sur les délégués, consultez Utilisation de délégués dans Visual Basic .NET pour la flexibilité d'exécution.
La première chose que vous devez coder est la méthode qui sera déléguée. La méconnaissance de ce point clé est à l’origine de plus de la confusion des étudiants VB.NET. Cette fonction, ou sous-routine, est l'endroit où tout le codage personnalisé pour les objets de type "Of" est effectué.
Une fois exécuté correctement, vous avez essentiellement terminé. C'est vraiment simple dans ce premier exemple. Une instance entière de la Bouteille est passé et le sous-programme sélectionne tout ce dont il a besoin. Codage du Pour chaque lui-même est simple aussi. Remplissez simplement l’adresse du délégué en utilisant le Adresse de méthode.
Sub displayBottle (ByVal b As Bottle) ResultList.Items.Add (_ b.Brand & "-" & _ b.Name & "-" & _ b.Category & "-" & _ b.Size) End Sub Private Sub ForEachButton_Click (… ResultList.Items.Clear () ResultList.Items.Add ("For Each Example") ResultList.Items.Add ("--------------------- - ") Cabinet.ForEach (AddressOf displayBottle) End Sub
Trouver tout est un peu plus compliqué. La documentation Microsoft pour Trouver tout ressemble à ça:
Dim instance As List Dim match As Predicate (Of T) Dim returnValue As List (Of T) returnValue = instance.FindAll (match)
Cette syntaxe inclut un nouvel élément, Prédicat (de T). Selon Microsoft, cela représentera la méthode «qui définit un ensemble de critères et détermine si l'objet spécifié répond à ces critères». En d'autres termes, vous pouvez créer n'importe quel code qui trouvera quelque chose dans la liste. J'ai codé mon Prédicat (de T) pour trouver quoi que ce soit dans la "bière" Catégorie.
Au lieu d'appeler le code délégué pour chaque élément de la liste, Trouver tout renvoie un entier Liste (T) ne contenant que les correspondances résultant de votre Prédicat (de T). C'est à votre code de définir cette seconde Liste (T) et faire quelque chose avec. Mon code ajoute simplement les éléments à un ListBox.
Private Sub FindAllButton_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Gère FindAllButton.Click ResultList.Items.Clear () ResultList.Items.Add ("FindAll Example") ResultList.Items.Add ("--- -------------------- ") Dim sublist As As List (Of Bottle) sublist = Cabinet.FindAll (AddressOf findBeer) For Each r As Bottle In sublist ResultList.Items. Add (_ r.Brand & "-" & _ r.Name & "-" & _ r.Category & "-" & _ r.Size) Next End Sub Function findBeer (ByVal b As Bottle) _ As Boolean If ( b.Category = "Beer") Puis retourne True Else Retourne False End If End Function
La dernière méthode examinée par cet article est Trier. Encore une fois, Microsoft utilise une terminologie que vous ne connaissez peut-être pas. Il existe en fait quatre surcharges différentes du Trier méthode:
Cela vous permet d'utiliser des méthodes de tri définies dans le .NET Framework pour la liste, de coder la vôtre, d'utiliser une comparaison définie par le système pour le type ou de trier une partie de la collection à l'aide d'une position de départ et d'un paramètre de comptage.
Dans cet exemple, puisque j'utilise la syntaxe suivante pour réellement effectuer le tri, j'utilise la troisième surcharge.
x.Name.x.Name.CompareTo (y.Name) (y.Name)
J'ai codé un autre délégué dans mon propre comparateur. Puisque je veux trier par mon Nom, Je tire juste cette valeur de chaque instance de la Bouteille objet qui est passé et utilisez le Trier (comparaison<(Of )>)). le Trier méthode réorganise réellement l'original Liste (T). C'est ce qui est traité après l'exécution de la méthode.
Private Sub SortButton_Click (expéditeur ByVal As System.Object, ByVal e As System.EventArgs) Gère SortButton.Click ResultList.Items.Clear () ResultList.Items.Add ("Sort Example") ResultList.Items.Add ("--- -------------------- ") Cabinet.Sort (AddressOf sortCabinet) Pour Chaque r Comme Bouteille Dans 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) As Integer Return x.Name. Fonction de fin CompareTo (y.Name)
Ces méthodes ont été sélectionnées pour montrer les principales manières dont les méthodes du Liste (T) sont en fait codés. Il existe cependant toute une série d'autres méthodes. Voilà ce qui fait Liste (T) si utile!