Visual Basic-Auflistungsklasse

Eine Auflistung ist eine Gruppierungsmethode für mehrere miteinander verwandte Elemente. Es gibt eine Vielzahl verschiedener Auflistungstypen. Vordefinierte Auflistungen werden in Visual Basic-Anwendungen für zahlreiche Zwecke verwendet, zum Beispiel für das Control.ControlCollection-Objekt in einem Form-Objekt, das von der Controls-Eigenschaft des Formulars zurückgegeben wird. Sie können auch eigene Auflistungen erstellen und damit Objekte verwalten und verarbeiten.

Auflistungen eignen sich hervorragend zum Verfolgen von Objekten, die die Anwendung gegebenenfalls dynamisch erstellen oder zerstören muss. Das folgende Codefragment zeigt, wie mit der Add-Methode eines Visual Basic Collection-Objekts eine Liste von widget-Objekten beibehalten wird, die der Benutzer erstellt hat.

' Declare and create the Collection object.
Public widgetColl As New Microsoft.VisualBasic.Collection() 
' Create a new widget and add it to the widgetColl collection.
Private Sub makeAWidget()
    Dim tempWidget As New widget()
    widgetColl.Add(tempWidget) 
End Sub

Im vorhergehenden Beispiel werden alle widget-Objekte, die über die makeAWidget-Prozedur erstellt wurden, von der widgetColl-Auflistung verwaltet und verfügbar gemacht. Sie können Objektverweise auf jedes widget-Objekt über den Index der Auflistung abrufen. Die Größe der Auflistung wird beim Hinzufügen eines neuen widget-Objekts automatisch angepasst. Sie können die Auflistung mittels For Each...Next-Anweisung (Visual Basic) durchlaufen. Sie können eine Textzeichenfolge als zweiten Parameter der Add-Methode bereitstellen, wenn Sie dem widget-Objekt einen Schlüssel zuweisen möchten, über den es abgerufen werden kann.

Das Visual Basic Collection-Objekt speichert alle Elemente als Object-Typ, damit Elemente eines beliebigen Datentyps hinzugefügt werden können. Es gibt keine Vorkehrung, die das Hinzufügen ungeeigneter Datentypen verhindert. Sie können dieses Beschränkung jedoch umgehen, indem Sie die generischen Auflistungen des System.Collections.Generic-Namespaces verwenden. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer Auflistung von Objekten (Visual Basic).

Erstellen und Löschen eines Auflistungsobjekts

Das Operator New (Visual Basic)-Schlüsselwort in der Deklaration für die Variable widgetColl bewirkt die Erstellung eines Collection-Objekts, wenn die Steuerung an die Deklarationsanweisung übergeben wird. Da Collection kein Werttyp, sondern eine Klasse ist, müssen Sie eine Instanz dieser Klasse erstellen und einen Verweis auf diese Instanz in einer Variablen speichern. Diese Instanz ist ein Visual Basic Collection-Objekt.

Ein Collection-Objekt ist wie jedes andere Objekt für die Garbage Collection (GC) bestimmt, wenn die letzte Variable, die einen Verweis auf dieses Objekt enthält, auf Nothing (Visual Basic) festgelegt ist oder außerhalb des gültigen Bereichs liegt. Alle darin enthaltenen Objektverweise werden freigegeben, wenn dies von der Garbage Collection angefordert wird. Aus diesem Grund wird die Variable widgetColl im vorhergehenden Beispiel in der übergeordneten Klasse deklariert, damit diese während der gesamten Lebensdauer des Programms vorhanden ist.

Eine Auflistung verwaltet Verweise auf die von ihr gesteuerten Objekte, enthält die eigentlichen Objekte aber nicht. Deshalb werden beim Löschen eines Collection-Objekts die von ihm gesteuerten Objekte nicht gelöscht. Jedes Objekt, das ein Element der Auflistung war, bleibt so lange bestehen, bis es für die Garbage Collection gekennzeichnet wurde.

Arbeiten mit Elementen

Die grundlegenden Dienste des Hinzufügens, Löschens und Abrufens von Elementen einer Auflistung sind von Schlüsseln und Indizes abhängig. Ein Schlüssel ist ein String-Wert. Hierbei kann es sich um einen Namen, eine Personenkennzahl, eine Telefonnummer oder einfach um eine in eine Zeichenfolge konvertierte ganze Zahl handeln. Mit der Add-Methode können Sie einem Element einen Schlüssel zuweisen (siehe Gewusst wie: Hinzufügen, Löschen und Abrufen von Elementen einer Auflistung (Visual Basic)).

Ein Index in der Collection-Klasse ist eine ganze Zahl zwischen 1 und der Anzahl der Elemente in der Auflistung. Die Count-Eigenschaft gibt die aktuelle Anzahl von Elementen zurück. Sie können den Anfangswert des Index eines Elements steuern, indem Sie den Before-Parameter oder den After-Parameter beim Aufrufen von Add verwenden. Der Wert kann sich jedoch ändern, wenn andere Elemente hinzugefügt oder gelöscht werden. Weitere Informationen finden Sie unter Add.

Sie können ein einzelnes Element aus einer Auflistung entfernen, indem Sie entweder den Schlüssel oder den Index an die Remove-Methode übergeben. Sie können eine Auflistung leeren und alle Elemente mit der Clear-Methode entfernen.

Zugreifen auf Elemente

Sie können einen Schlüsselwert an die Contains-Methode übergeben, um zu testen, ob eine Auflistung ein Element mit diesem Schlüssel enthält. Sie können ein Element abrufen, indem Sie entweder den Schlüssel oder den Index an die Item-Eigenschaft übergeben.

Mit Indexwerten und der Item-Eigenschaft können Sie die Elemente einer Auflistung durchlaufen. Sie können aber auch die For Each...Next-Anweisung (Visual Basic) verwenden. Im folgenden Beispiel werden zwei Möglichkeiten gezeigt, allen Mitarbeitern in einer Auflistung von employee-Objekten eine Gehaltserhöhung von 10 % zu gewähren, wobei davon ausgegangen wird, dass die Variable employeesColl einen Verweis auf ein Collection-Objekt enthält:

Option Strict On
' The following alternative uses the Count and Item properties.
Dim emp As employee
For counter As Integer = 1 To employeesColl.Count 
    emp = CType(employeesColl.Item(counter), employee)
    emp.payRate *= 1.1
Next counter
' The following alternative uses the For Each...Next statements.
For Each emp As employee In employeesColl
    emp.payRate *= 1.1
Next emp

Wenn Sie employeesColl jedoch mindestens ein Element hinzugefügt haben, das nicht den Typ employee aufweist, löst die For Each-Schleife zur Laufzeit eine ArgumentException-Ausnahme aus.

Datentyp der Elemente

Ein Visual Basic Collection-Objekt speichert jedes Element mit dem Object-Datentyp. Daher ist der Bereich der Datentypen, den Sie einem Collection-Objekt hinzufügen können, mit dem Bereich der Datentypen identisch, den Sie in einer Object-Variable speichern können. Hierzu gehören u. a. standardmäßige Datentypen, Objekte und Arrays sowie benutzerdefinierte Strukturen und Klasseninstanzen.

Da das Collection-Objekt jedes Element als Object speichert, gibt die Item-Eigenschaft einen Object-Wert zurück. Um das Element in Ihrem Code zu verwenden, müssen Sie es vom Object-Typ in den Laufzeitdatentyp des Elements konvertieren. Wie Sie das machen, hängt von der Einstellung des Typüberprüfungsschalters der Option Strict-Anweisung ab.

Implizites Konvertieren von "Object"

Wenn für Option Strict die Einstellung Off festgelegt ist, können Sie ein Collection-Element wie im folgenden Beispiel gezeigt implizit in den entsprechenden Datentyp konvertieren.

Option Strict Off
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
    aString = sampleColl.Item(1) 
Catch ex As Exception
    ' Insert code to run if the collection item cannot be converted to String.
End Try

Explizites Konvertieren von "Object"

Wenn für Option Strict die Einstellung On festgelegt ist, müssen Sie Object explizit in den Laufzeitdatentyp des Elements konvertieren. Um auf diese Weise ein Element aus Item zu erhalten, können Sie die Konvertierung wie im folgenden Beispiel gezeigt mittels der CType-Funktion (Visual Basic) ausführen.

Option Strict On
Dim sampleColl As New Microsoft.VisualBasic.Collection()
Dim sampleString As String = "This is a string"
Dim aString As String
sampleColl.Add(sampleString)
' The following statements convert the collection item to a string.
Try
    aString = CType(sampleColl.Item(1), String) 
Catch ex As Exception
    ' Insert code to run if the collection item cannot be converted to String.
End Try

Zusätzliche Dienste

Die Eigenschaften und Methoden des Collection-Objekts bieten nur die grundlegenden Dienste für Auflistungen. Die Add-Methode kann beispielsweise nicht den Typ des zu einer Auflistung hinzugefügten Elements überprüfen. Diese Überprüfung kann jedoch sinnvoll sein, wenn Sie sicherstellen möchten, dass die Auflistung nur einen Elementtyp enthält. Wenn Sie dies in der Add-Methode sicherstellen können, liegt eine Auflistung mit starkem Typ vor. In diesem Fall müssen Sie den Rückgabetyp nicht von der Item-Eigenschaft in den entsprechenden Laufzeitdatentyp konvertieren. Dies führt zu einer Leistungssteigerung.

Durch das Erstellen eigener Auflistungsklassen (siehe Gewusst wie: Definieren von Auflistungen in eigenen Klassen (Visual Basic)) können Sie stabilere Funktionen sowie zusätzliche Eigenschaften, Methoden und Ereignisse bereitstellen.

Siehe auch

Referenz

Collection

Konzepte

Arrays in Visual Basic

Auflistungen in Visual Basic