Nicht-generische Auflistungen unter VB.NET

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Unter VB6/VBA waren die bekanntesten und sofort einsetzbaren Auflistungsklassen das Array und die Collection. Sie boten einfache Möglichkeiten zum Hinzufügen von Objektverweisen oder Werten, zum Löschen derselben oder auch zum Bearbeiten. Wer mehr brauchte, konnte sich noch des Dictionary-Objekts bedienen, was aber schon das Einbinden eines weiteren Verweises erforderte. Unter .NET gibt es bei Auflistungsklassen einen wichtigen Unterschied: nicht-generische Auflistungsklassen, die nicht stark typisiert sind und generische Auflistungsklassen, die stark typisiert sind. Der vorliegende Artikel betrachtet die wichtigsten nicht-generischen Auflistungsklassen und ihre Eigenschaften.

Hinweis zu den Beispielen

Die Beispiele dieses Artikels haben wir in LINQPad5 erstellt und ausprobiert. Das ist eine schnellere Möglichkeit als ein Visual Studio Projekt zu erstellen, das Sie für jeden Test neu kompilieren und starten müssen. Weitere Infos zu LINQPad5 finden Sie beispielsweise im Artikel LINQPad: LINQ, C# und VB einfach ausprobieren (www.datenbankentwickler.net/100).

Wir verwenden hier unter Language den Wert VB Program und rufen unsere Beispielprozeduren jeweils von der Hauptprozedur Sub Main auf.

Was sind Auflistungsklassen

Auflistungsklassen sind Klassen, mit denen Sie Objekte erstellen können, die das Speichern einer Reihe anderer Objekte erlauben. .NET bietet einige Auflistungsklassen für verschiedene Anwendungszwecke an. Sie sind aber nicht einfach nur Sammlungen von Daten, sondern bieten auch die Infrastruktur an, um diese Daten an verschiedenen Stellen auf spezielle Art zu nutzen – zum Beispiel als Datenquelle von Steuerelementen unter WPF.

Die Auflistungsklassen implementieren verschiedene Interfaces, die Eigenschaften, Methoden und Ereignisse für die unterschiedlichen Zwecke vorsehen. Welche Interfaces eine Auflistungsklasse implementiert, können Sie im Objektkatalog von Visual Studio nachsehen (Strg + Alt + J). Bild 1 zeigt die Basistypen beziehungsweise Schnittstellen der Auflistung ArrayList. Hier finden Sie auch die Eigenschaften, Methoden und Ereignisse der jeweiligen Auflistungsklasse.

Eigenschaften, Methoden und Ereignisse der IList-Schnittstelle

Bild 1: Eigenschaften, Methoden und Ereignisse der IList-Schnittstelle

Die ArrayList-Auflistungsklasse implementiert beispielsweise die folgenden Interfaces:

  • IEnumerable: Stellt die Eigenschaft GetEnumerator bereit, die allerdings nicht explizit verwendet wird, sondern das Durchlaufen der enthaltenen Elemente in einer For Each-Schleife erlaubt
  • ICollection: Liefert vor allem die Eigenschaft Count.
  • IList: Enthält Methoden, um die Liste zu verwalten – also um Elemente hinzuzufügen, zu entfernen und abzufragen, die Liste zu leeren und weitere Eigenschaften.
  • ICloneable: Liefert die Methode Clone.

Anhand der Schnittstellen, die eine Auflistungsklasse implementiert, können Sie erkennen, welche Möglichkeiten diese bietet. Andere Auflistungsklassen verwenden noch weitere Schnittstellen wie beispielsweise IDeserializationCallback, IDictionary oder ISerializable.

Dadurch, dass die verschiedenen Auflistungsklassen die Schnittstellen implementieren, haben diese einige Gemeinsamkeiten, auf die Sie zählen können – zum Beispiel die Möglichkeit, die Menge der enthaltenen Elemente mit Count zu ermitteln oder diese mit For…Each zu durchlaufen.

Namespaces mit Auflistungsklassen

Die Auflistungsklassen sind in eigenen Namespaces organisiert. Der Namespace System.Collections enthält beispielsweise die Auflistungsklassen ArrayList, HashTable, SortedList oder Stack. Die generischen Auflistungsklassen, über die wir in einem weiteren Artikel namens Generische Auflistungen unter VB.NET berichten (www.datenbankentwickler.net/268), finden Sie im Namespace System.Collections.Generic. Die ObservableCollection, die oft als Datenquelle für WPF-Steuerelemente dient, stammt aus dem Namespace System.Collections.Objectmodel. Die jeweiligen Schnittstellen sind übrigens auch in den jeweiligen Namespaces zu finden.

Nicht-generische versus generische Auflistungsklassen

Nicht-generische Auflistungsklassen unter VB.Net sind, wie oben bereits angedeutet, nicht “stark typisiert”. Was heißt das überhaupt Das bedeutet, dass wir nicht explizit den Typ der in der Auflistungsklasse enthaltenen Elemente angeben. Deshalb wird hier der Typ Object verwendet. Im Gegensatz dazu geben wir bei generischen Auflistungsklassen den Typ der in der Auflistungsklasse enthaltenen Elemente explizit an, zum Beispiel String oder auch komplexere Datentypen. Ein Beispiel, das wir schon oft genutzt haben, sind die Auflistungsklassen mit Entitäten aus einer Datenbank, die wir als Datenquelle für die Steuerelemente unter WPF nutzen – diese haben beispielsweise den Datentyp Kunde oder Produkt. Nicht generische Auflistungsklassen können Sie hingegen auch Elemente unterschiedlicher Datentypen hinzufügen.

 

Schreibe einen Kommentar