Namespaces in Visual Basic

Aktualisiert: November 2007

Die in einer Assembly definierten Objekte werden in Namespaces organisiert. Assemblys können mehrere Namespaces enthalten, die ihrerseits weitere Namespaces umfassen können. Durch Namespaces wird Mehrdeutigkeit vermieden und das Erstellen von Verweisen in umfangreichen Objektgruppen, wie Klassenbibliotheken, erleichtert.

In .NET Framework wird z. B. die ListBox-Klasse im System.Windows.Forms-Namespace definiert. Das folgende Codefragment zeigt die Deklaration einer Variablen mit dem vollgekennzeichneten Namen für diese Klasse:

Dim LBox As System.Windows.Forms.ListBox

Vermeiden von Namenskonflikten

.NET Framework-Namespaces greifen das zuweilen als Namespaceverunreinigung bezeichnete Problem auf, bei dem der Entwickler einer Klassenbibliothek durch die Verwendung ähnlicher Namen in einer anderen Bibliothek gestört wird. Diese Konflikte mit vorhandenen Komponenten werden auch als Namenskollisionen bezeichnet.

Wenn Sie z. B. eine neue Klasse mit dem Namen ListBox erstellen, können Sie ohne Qualifikation im Projekt darauf zugreifen. Wenn jedoch im gleichen Projekt die ListBox-Klasse von .NET Framework verwendet werden soll, muss ein vollqualifizierter Verweis erstellt werden, damit der Verweis eindeutig ist. Wenn der Verweis nicht eindeutig ist, gibt Visual Basic eine Fehlermeldung mit dem Hinweis aus, dass der Name mehrdeutig ist. Das folgende Codebeispiel zeigt die Deklaration dieser Objekte:

' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox

In der folgenden Abbildung werden zwei Namespacehierarchien aufgeführt, die beide ein Objekt mit dem Namen ListBox enthalten.

Standardmäßig enthält jede ausführbare Datei, die mit Visual Basic erstellt wird, einen Namespace mit demselben Namen wie das Projekt. Wenn Sie ein Objekt z. B. in einem Projekt mit dem Namen ListBoxProject definieren, enthält die ausführbare Datei ListBoxProject.exe den Namespace ListBoxProject.

Mehrere Assemblys können denselben Namespace verwenden. Visual Basic behandelt sie als einen einzigen Satz Namen. Sie können z. B. in der Assembly Assemb1 Klassen für den Namespace SomeNameSpace erstellen und dann in der Assembly Assemb2 weitere Klassen für denselben Namespace definieren.

Vollgekennzeichnete Namen

Vollqualifizierte Namen sind Objektverweise, denen der Name des Namespaces vorangestellt wird, in dem das Objekt definiert ist. Durch Erstellen eines Verweises auf die jeweilige Klasse können Sie in anderen Projekten definierte Objekte verwenden. Klicken Sie dazu im Menü Projekt auf Verweis hinzufügen, und tragen Sie dann den vollgekennzeichneten Namen des Objekts in den Code ein. Das folgende Codefragment zeigt die Verwendung des vollgekennzeichneten Namens eines Objekts im Namespace eines anderen Projekts:

Dim LBC As New ListBoxProject.Form1.ListBox

Mit vollqualifizierten Namen werden Namenskonflikte verhindert, da der Compiler mit ihnen bestimmen kann, welches Objekt verwendet wird. Die Namen selbst werden jedoch häufig lang und unübersichtlich. Um dieses Problem zu umgehen, können Sie mit der Imports-Anweisung einen Alias definieren, ein Kurzname, der anstelle des vollqualifizierten Namens verwendet werden kann. Im folgenden Codebeispiel werden Aliase für zwei vollqualifizierte Namen erstellt, mit denen dann zwei Objekte definiert werden.

Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox

Wenn Sie die Imports-Anweisung ohne Alias verwenden, können Sie auf alle Namen in diesem Namespace ohne Qualifizierung zugreifen, vorausgesetzt, sie sind in dem Projekt eindeutig. Wenn das Projekt Imports-Anweisungen für Namespaces enthält, die Elemente mit gleichem Namen umfassen, müssen Sie einen solchen Namen vollgekennzeichnet angeben. Angenommen, das Projekt enthält die beiden folgenden Imports-Anweisungen:

' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2

Wenn versucht wird, ohne Vollqualifizierung auf Class1 zuzugreifen, gibt Visual Basic eine Fehlermeldung mit dem Hinweis aus, dass der Name Class1 mehrdeutig ist.

Anweisungen auf Namespaceebene

Innerhalb eines Namespaces können Sie Elemente wie Module, Schnittstellen, Klassen, Delegate, Enumerationen, Strukturen und andere Namespaces definieren. Sie können auf Namespaceebene keine Elemente wie Eigenschaften, Prozeduren, Variablen und Ereignisse definieren. Diese Elemente müssen in Containern, z. B. Modulen, Strukturen oder Klassen, deklariert werden.

Hinweis:

Wenn Sie eine geschachtelte Hierarchie aus Namespaces definiert haben, kann Code innerhalb dieser Hierarchie möglicherweise nicht auf Klassen in anderen Namespaces mit dem gleichen Namen zugreifen. Wenn Sie z. B. den Namespace System im Namespace SpecialSpace definieren, können Sie auf die Member im .NET Framework-Namespace System nur zugreifen, wenn Sie sie mit dem Schlüsselwort Global vollständig qualifizieren. Weitere Informationen finden Sie unter Global.

Siehe auch

Aufgaben

Gewusst wie: Erstellen und Verwenden von Assemblys

Konzepte

Assemblys

Verweise und die Imports-Anweisung

Referenz

Global

Imports-Anweisung (.NET-Namespace und Typ)

ListBox

System.Windows.Forms

Weitere Ressourcen

Änderungen in der Programmiersprache für Visual Basic 6.0-Benutzer