Generika erweitern die Leistung und Flexibilität von VB.NET in vielen Bereichen, aber Sie erhalten einen größeren Leistungsvorteil und mehr Programmieroptionen für Generika Aufführen Objekt [Liste (von T)] als bei jedem anderen.
Benutzen Liste (von T)müssen Sie verstehen, wie Sie die vielen Methoden implementieren, die .NET Framework bietet. Nachfolgend sind drei Beispiele aufgeführt Für jedes, Finde alle, und Sortieren, das zeigt, wie das Generikum Aufführen Klasse funktioniert.
Der allererste Schritt besteht darin, ein Generikum zu erstellen Aufführen. Sie können die Daten auf viele Arten abrufen, aber am einfachsten ist es, einfach Hinzufügen es. Der folgende Code zeigt, wie ich meine Bier- und Weinsammlung klassifiziere!
Startcode
Es muss zuerst ein Objekt geben, das eine Flasche aus der Sammlung darstellt. In einer Windows Forms-Anwendung muss sich die Form-Klasse zuerst in einer Datei befinden. Andernfalls funktioniert der Visual Studio-Designer nicht ordnungsgemäß. Fügen Sie dies am Ende ein:
Public Class Flasche. Public Brand As String. Öffentlicher Name als Zeichenfolge. Öffentliche Kategorie als Zeichenfolge. Öffentliche Größe als Dezimalzahl. Öffentliches Sub Neu (_. ByVal m_Brand As String, _. ByVal m_Name As String, _. ByVal m_Category As String, _. ByVal m_Size As Decimal) Marke = m_Brand. Name = m_Name. Kategorie = m_Kategorie. Größe = m_Size. End Sub. Klasse beenden
Um die Sammlung zu erstellen, Hinzufügen die Gegenstände. Das ist was in der Formular laden Veranstaltung:
Schrank als Liste (der Flasche) dimmen = _. "Neue Liste (der Flasche) Kabinett. Hinzufügen (Neue Flasche (_. "Castle Creek", _. "Uintah Blanc", _. "Wein", 750)) Kabinett. Hinzufügen (Neue Flasche (_. "Zion Canyon Brewing Company", _. "Springdale Amber Ale", _. "Beer", 355)) Kabinett. Hinzufügen (Neue Flasche (_. "Spanish Valley Vineyards", _. "Syrah", _. "Wein", 750)) Kabinett. Hinzufügen (Neue Flasche (_. "Wasatch Biere", _. "Polygamy Porter", _. "Beer", 355)) Kabinett. Hinzufügen (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 derselben Sammlung (in diesem Fall beide String und Dezimal) und effizient, typsichere "späte Bindung".
Für jedes Beispiel
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 Definition der Verwendungssyntax:
Instanz als Liste dimmen Aktion als Aktion (von T) dimmen. ForEach (Aktion)
Microsoft definiert weiter Aktion als "an eine Methode delegieren, die eine Aktion für das an sie übergebene Objekt ausführt. Die Elemente der aktuellen Liste (T) werden einzeln an den Delegierten der Aktion (T) übergeben. "
Trinkgeld: Weitere Informationen zu Delegierten finden Sie unter Verwenden von Delegaten in Visual Basic .NET für Laufzeitflexibilität.
Das erste, was Sie codieren müssen, ist die Methode, die delegiert wird. Das Missverständnis dieses einen wichtigen Punktes ist die Ursache von die meisten der Verwirrung der VB.NET-Studenten. In dieser Funktion oder Unterroutine 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 das Unterprogramm wählt alles aus, was benötigt wird. Codierung der Für jedes selbst ist auch einfach. Geben Sie einfach die Adresse des Delegierten mit ein Adresse von Methode.
Sub displayBottle (ByVal b As Bottle) ResultList. Artikel. Addiere (_ b. Marke & "-" & _ b. Name & "-" & _ b. Kategorie & "-" & _ b. Größe) End Sub Private Sub ForEachButton_Click (... Ergebnisliste. Artikel. Clear () ResultList. Artikel. Add ("Für jedes Beispiel") ResultList. Artikel. Kabinett hinzufügen (""). ForEach (AddressOf displayBottle) End Sub
FindAll Beispiel
Finde alle ist etwas komplizierter. Die Microsoft-Dokumentation für Finde alle sieht aus wie das:
Instanz als Liste dimmen Dim Übereinstimmung als Prädikat (von T) dimmen returnValue als Liste (von T) returnValue = Instanz. FindAll (Übereinstimmung)
Diese Syntax enthält ein neues Element: Prädikat (von T). Laut Microsoft stellt dies die Methode dar, "die eine Reihe von Kriterien definiert und bestimmt, ob die Das angegebene Objekt erfüllt diese Kriterien. "Mit anderen Worten, Sie können jeden Code erstellen, der etwas in der findet aufführen. 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 etwas damit machen. Mein Code fügt nur die Elemente zu a hinzu ListBox.
Private Sub FindAllButton_Click (ByVal-Absender als System. Objekt, ByVal e As System. EventArgs) Behandelt FindAllButton. Klicken Sie auf ResultList. Artikel. Clear () ResultList. Artikel. Add ("FindAll Example") ResultList. Artikel. Add ("") Dim sublist As List (Of Bottle) sublist = Cabinet. FindAll (AddressOf findBeer) für jedes r As Bottle In sublist ResultList. Artikel. Addiere (_ r. Marke & "-" & _ r. Name & "-" & _ r. Kategorie & "-" & _ r. Größe) Next End Unterfunktion findBeer (ByVal b As Bottle) _ As Boolean If (b. Category = "Beer") Dann True zurückgeben, sonst False End If End-Funktion zurückgeben
Beispiel sortieren
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 Überlastungen der Sortieren Methode:
- Sortieren()
- Sortieren (IComparer (T))
- Sortieren (Vergleich (T))
- Sortieren (Int32, Int32, IComparer (T))
Auf diese Weise können Sie in .NET Framework definierte Sortiermethoden für die Liste verwenden, Ihre eigenen codieren und ein System verwenden definierter Vergleich für den Typ oder Sortierteil der Sammlung anhand einer Startposition und Anzahl Parameter.
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 NameIch ziehe genau diesen Wert aus jeder Instanz des Flasche Objekt, das übergeben wird und verwenden Sie die Sortieren (Vergleich )>)). Das Sortieren Methode ordnet tatsächlich das Original neu Liste (T). Das wird verarbeitet, nachdem die Methode ausgeführt wurde.
Private Sub SortButton_Click (ByVal-Absender als System. Objekt, ByVal e As System. EventArgs) Behandelt SortButton. Klicken Sie auf ResultList. Artikel. Clear () ResultList. Artikel. Add ("Sortierbeispiel") ResultList. Artikel. Kabinett hinzufügen (""). Sortieren (AddressOf sortCabinet) für jede r As Bottle In Cabinet ResultList. Artikel. Addiere (_ r. Name & "-" & _ r. Marke & "-" & _ r. Kategorie & "-" & _ r. Größe) Nächstes Ende Sub Private Shared Function sortCabinet (_ ByVal x als Flasche, ByVal y als Flasche) als Ganzzahl Rückgabe x. Name. CompareTo (y. Name) Endfunktion
Diese Methoden wurden ausgewählt, um die wichtigsten Möglichkeiten der Framework-Methoden zu demonstrieren Liste (T) sind tatsächlich codiert. Es gibt jedoch eine ganze Reihe anderer Methoden. Das macht aus Liste (T) so nützlich!