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!
Code de départ
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:
Bouteille de classe publique. Marque publique en tant que chaîne. Nom public sous forme de chaîne. Catégorie publique en tant que chaîne. Taille publique au format décimal. Public Sub New (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category As String, _. ByVal m_Size As Decimal) Marque = m_Brand. Nom = m_Name. Catégorie = m_Catégorie. Taille = m_Taille. End Sub. Fin de classe
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) = _. "Nouvelle liste (de bouteille) Cabinet. Ajouter (Nouvelle bouteille (_. "Castle Creek", _. "Uintah Blanc", _. "Vin", 750)) Cabinet. Ajouter (Nouvelle bouteille (_. "Zion Canyon Brewing Company", _. "Springdale Amber Ale", _. "Bière", 355)) Cabinet. Ajouter (Nouvelle bouteille (_. "Spanish Valley Vineyards", _. "Syrah", _. "Vin", 750)) Cabinet. Ajouter (Nouvelle bouteille (_. "Bières Wasatch", _. "Polygamy Porter", _. "Bière", 355)) Cabinet. Ajouter (Nouvelle bouteille (_. "Bière Squatters", _. "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.
Exemple ForEach
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 As (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é à l'action (T). "
Pointe: Pour en savoir plus sur les délégués, lisez 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.
Sous displayBottle (ByVal b As Bottle) ResultList. Articles. Ajouter (_ b. Marque & "-" & _ b. Nom & "-" & _ b. Catégorie & "-" & _ b. Taille) End Sub Private Sub ForEachButton_Click (... ResultList. Articles. Clear () ResultList. Articles. Ajouter ("pour chaque exemple") ResultList. Articles. Ajoutez ("") Cabinet. ForEach (AddressOf displayBottle) End Sub
Exemple FindAll
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 comprend 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 le l'objet spécifié répond à ces critères. "En d'autres termes, vous pouvez créer n'importe quel code qui trouvera 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. Objet, ByVal e As System. EventArgs) Gère FindAllButton. Cliquez sur ResultList. Articles. Clear () ResultList. Articles. Add ("FindAll Example") ResultList. Articles. Ajouter ("") Dim sublist As List (Of Bottle) sublist = Cabinet. FindAll (AddressOf findBeer) pour chaque r comme bouteille dans la sous-liste ResultList. Articles. Ajoutez (_ r. Marque & "-" & _ r. Nom & "-" & _ r. Catégorie & "-" & _ r. Size) Next End Sub Function findBeer (ByVal b As Bottle) _ As Boolean If (b. Category = "Beer") Alors retourne True Else Retourne False End If End Function
Exemple de tri
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:
- Trier()
- Trier (IComparer (T))
- Trier (comparaison (T))
- Trier (Int32, Int32, IComparer (T))
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 un système comparaison définie pour le type ou tri d'une partie de la collection en utilisant une position de départ et un décompte paramètre.
Dans cet exemple, puisque j'utilise la syntaxe suivante pour effectuer le tri, j'utilise la troisième surcharge.
X. Nom.x. Nom. CompareTo (y. Nom) (y. Nom)
J'ai codé un autre délégué dans mon propre comparateur. Puisque je veux trier par mon Nom, Je retire juste cette valeur de chaque instance du Bouteille objet qui est passé et utilisez le Trier (comparaison )>)). 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 (ByVal sender As System. Objet, ByVal e As System. EventArgs) Gère SortButton. Cliquez sur ResultList. Articles. Clear () ResultList. Articles. Ajouter ("Exemple de tri") ResultList. Articles. Ajoutez ("") Cabinet. Trier (AddressOf sortCabinet) Pour Chaque r Comme Bouteille Dans Cabinet ResultList. Articles. Ajoutez (_ r. Nom & "-" & _ r. Marque & "-" & _ r. Catégorie & "-" & _ r. Size) Next End Sub Private Shared Function sortCabinet (_ ByVal x As Bottle, ByVal y As Bottle) As Integer Return x. Nom. CompareTo (y. Nom) Fonction de fin
Ces méthodes ont été sélectionnées pour montrer les principales manières dont les méthodes 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!