Generika erweitern die Leistung und Flexibilität von VB.NET in vielen Bereichen, aber Sie erhalten einen größeren Leistungsvorteil und mehr Programmieroptionen im Allgemeinen Aufführen Objekt [Liste (von T)] als bei jedem anderen.
Benutzen Liste (von T), Sie müssen verstehen, wie die vielen Methoden implementiert werden, die .NET Framework bereitstellt. Im Folgenden sind drei Beispiele aufgeführt Für jedes, Finde alle, und Sortieren, das zeigt, wie das generikum Aufführen klasse funktioniert.
Der allererste Schritt ist das Erstellen eines Generikums Aufführen. Sie können die Daten auf viele Arten abrufen, aber am einfachsten ist es, sie einfach abzurufen Hinzufügen es. Der folgende Code zeigt, wie ich meine Bier- und Weinsammlung klassifiziere!
Zunächst muss ein Objekt vorhanden sein, das eine Flasche aus der Sammlung darstellt. In einer Windows Forms-Anwendung muss sich die Form-Klasse zuerst in einer Datei befinden, da der Visual Studio-Designer sonst nicht ordnungsgemäß funktioniert. Fügen Sie dies am Ende ein:
Öffentliche Klasse Flasche Öffentliche Marke Als Zeichenfolge Öffentlicher Name Als Zeichenfolge Öffentliche Kategorie Als Zeichenfolge Öffentliche Größe Als Dezimalzahl Öffentliches Unterelement Neu (_ ByVal m_Brand Als Zeichenfolge, _ ByVal m_Name Als Zeichenfolge, _ ByVal m_Size Als Dezimalzahl) Marke = m_Brand Name = m_Name Kategorie = m_Category Größe = m_Size End Sub End Class
Die Sammlung aufbauen, Hinzufügen die Gegenstände. Das ist was in der Formular laden Veranstaltung:
Dim Cabinet As List (Of Bottle) = _ "Neue Liste (Of Bottle) Cabinet.Add (Neue Flasche (_" Castle Creek ", _" Uintah Blanc ", _" Wine ", 750)) Cabinet.Add (Neue Flasche (_ "Zion Canyon Brewing Company", _ "Springdale Amber Ale", _ "Beer", 355)) Cabinet.Add (Neue Flasche (_ "Spanish Valley Vineyards", _ "Syrah", _ "Wine", 750) ) Cabinet.Add (Neue Flasche (_ "Wasatch Beers", _ "Polygamy Porter", _ "Beer", 355)) Cabinet.Add (Neue Flasche (_ "Squatters Beer", _ "Provo Girl Pilsner", _ " Beer ", 355))
Der gesamte obige Code ist Standardcode in VB.NET 1.0. Beachten Sie dies jedoch, indem Sie Ihre eigenen definieren Flasche Objekt erhalten Sie die Vorteile mehrerer Typen in der gleichen Sammlung (in diesem Fall beide String und Dezimal) und effiziente, typsichere "späte Bindung".
Der Spaß beginnt, wenn wir die Methoden anwenden. Lassen Sie uns zunächst das Vertraute implementieren Für jedes Methode. Die Microsoft-Dokumentation enthält die folgende Syntaxdefinition:
Instanz dimmen als Liste Aktion dimmen als Aktion (von T) Instanz.ForEach (Aktion)
Microsoft definiert weiter Aktion als "Delegieren an eine Methode, die eine Aktion für das übergebene Objekt ausführt. Die Elemente der aktuellen Liste (T) werden einzeln an den Action (T) -Delegierten übergeben."
Trinkgeld: Weitere Informationen zu Delegaten finden Sie unter Verwenden von Delegaten in Visual Basic .NET für Runtime Flexibility.
Das erste, was Sie codieren müssen, ist die Methode, die delegiert wird. Das Missverständnis dieses einen wichtigen Punktes ist die Quelle von die meisten der Verwirrung der VB.NET-Studenten. In dieser Funktion oder Subroutine wird die gesamte benutzerdefinierte Codierung für die Objekte vom Typ "Of" durchgeführt.
Bei korrekter Ausführung sind Sie im Wesentlichen fertig. In diesem ersten Beispiel ist es wirklich einfach. Eine ganze Instanz der Flasche wird übergeben und die Subroutine wählt alles aus, was benötigt wird. Codierung der Für jedes selbst ist auch einfach. Geben Sie einfach die Adresse des Teilnehmers über den Button ein Adresse von Methode.
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 ("Für jedes Beispiel") ResultList.Items.Add ("--------------------- - ") Cabinet.ForEach (AddressOf displayBottle) End Sub
Finde alle ist etwas komplizierter. Die Microsoft-Dokumentation für Finde alle sieht aus wie das:
Instanz als Liste dimmen Übereinstimmung als Prädikat (von T) dimmen returnValue als Liste (von T) returnValue = instance.FindAll (match)
Diese Syntax enthält ein neues Element, Prädikat (von T). Laut Microsoft stellt dies die Methode dar, "die einen Satz von Kriterien definiert und feststellt, ob das angegebene Objekt diese Kriterien erfüllt". Mit anderen Worten, Sie können jeden Code erstellen, der etwas in der Liste findet. Ich habe meine codiert Prädikat (von T) etwas im "Bier" zu finden Kategorie.
Anstatt den Delegatencode für jedes Element in der Liste aufzurufen, Finde alle gibt ein ganzes zurück Liste (T) enthält nur die Übereinstimmungen, die sich aus Ihrem ergeben Prädikat (von T). Es liegt an Ihrem Code, diese Sekunde zu definieren Liste (T) und mach etwas damit. Mein Code fügt nur die Artikel zu einem hinzu ListBox.
Private Sub FindAllButton_Click (ByVal Absender als System.Object, ByVal e als System.EventArgs) Behandelt FindAllButton.Click ResultList.Items.Clear () ResultList.Items.Add ("FindAll Example") ResultList.Items.Add ("--- -------------------- ") Unterliste als Liste (der Flasche) verdunkeln Unterliste = Cabinet.FindAll (AddressOf findBeer) Für jedes r als Flasche in Unterliste ResultList.Items. (_ R.Brand & "-" & _ r.Name & "-" & _ r.Category & "-" & _ r.Size) hinzufügen Next End Sub Function findBeer (ByVal b As Bottle) _ As Boolean If ( b.Category = "Beer") Dann Return True Else Return False End If End Function
Die letzte Methode, die in diesem Artikel untersucht wird, ist Sortieren. Auch hier verwendet Microsoft eine Terminologie, mit der Sie möglicherweise nicht vertraut sind. Es gibt tatsächlich vier verschiedene Überladungen der Sortieren Methode:
Auf diese Weise können Sie in .NET Framework definierte Sortiermethoden für die Liste verwenden, eigene Codes erstellen, einen systemdefinierten Vergleich für den Typ verwenden oder einen Teil der Auflistung anhand einer Startposition und eines Zählparameters sortieren.
In diesem Beispiel verwende ich die dritte Überladung, da ich die folgende Syntax verwende, um die Sortierung tatsächlich durchzuführen.
x.Name.x.Name.CompareTo (y.Name) (y.Name)
Ich habe einen anderen Delegierten für meinen eigenen Vergleicher codiert. Da möchte ich nach meinem sortieren Name, Ich ziehe genau diesen Wert aus jeder Instanz von Flasche Objekt, das übergeben wird, und verwenden Sie die Sortieren (Vergleich<(Of )>)). Das Sortieren Methode ordnet tatsächlich das Original neu Liste (T). Das ist, was verarbeitet wird, nachdem die Methode ausgeführt wurde.
Private Sub SortButton_Click (ByVal Absender als System.Object, ByVal und als System.EventArgs) Behandelt SortButton.Click ResultList.Items.Clear () ResultList.Items.Add ("Sort Example") ResultList.Items.Add ("--- -------------------- ") Cabinet.Sort (AddressOf sortCabinet) für jedes r als Flasche im Schrank ResultList.Items.Add (_ r.Name &" - " & _ r.Brand & "-" & _ r.Category & "-" & _ r.Size) Nächstes Ende Sub Private Shared Function sortCabinet (_ ByVal x als Flasche, ByVal y als Flasche) As Integer Return x.Name. CompareTo (y.Name) End Function
Diese Methoden wurden ausgewählt, um die wichtigsten Methoden der Framework-Methode zu demonstrieren Liste (T) sind tatsächlich codiert. Es gibt jedoch eine ganze Reihe anderer Methoden. Das macht es aus Liste (T) so nützlich!