Freigeben über


Namespaces in Visual Basic

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 Sie jedoch im gleichen Projekt die ListBox-Klasse von .NET Framework verwenden möchten, müssen Sie einen vollqualifizierten Verweis erstellen, 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.

Namespacehierarchie

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 den gleichen Namespace verwenden. Visual Basic behandelt diese als einzelnen Namenssatz. 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.

Globales Schlüsselwort

Wenn Sie eine geschachtelte Hierarchie aus Namespaces definiert haben, kann Code innerhalb dieser Hierarchie möglicherweise nicht auf den System-Namespace von .NET Framework zugreifen. Im folgenden Beispiel wird eine Hierarchie gezeigt, in der der SpecialSpace.System-Namespace den Zugriff auf System blockiert.

Namespace SpecialSpace
    Namespace System
        Class abc
            Function getValue() As System.Int32
                Dim n As System.Int32
                Return n
            End Function
        End Class
    End Namespace
End Namespace

Folglich kann der Visual Basic-Compiler den Verweis auf System.Int32 nicht auflösen, weil Int32 von SpecialSpace.System nicht definiert wird. Sie können das Global-Schlüsselwort verwenden, um die Qualifikationskette an der äußersten Ebene der .NET Framework-Klassenbibliothek zu beginnen. Dies ermöglicht es Ihnen, den System-Namespace oder irgendeinen anderen Namespace in der Klassenbibliothek anzugeben. Dies wird anhand des folgenden Beispiels veranschaulicht:

Namespace SpecialSpace
    Namespace System
        Class abc
            Function getValue() As Global.System.Int32
                Dim n As Global.System.Int32
                Return n
            End Function
        End Class
    End Namespace
End Namespace

Sie können Global verwenden, um auf andere Namespaces auf Stammebene zuzugreifen, z. B. Microsoft.VisualBasic, sowie auf jeden anderen Namespace, der dem Projekt zugeordnet ist.

Siehe auch

Aufgaben

Gewusst wie: Erstellen und Verwenden von Assemblys über die Befehlszeile (C# und Visual Basic)

Referenz

Assemblys und der globale Assemblycache (C# und Visual Basic)

Imports-Anweisung (.NET-Namespace und Typ)

ListBox

System.Windows.Forms

Konzepte

Verweise und die Imports-Anweisung (Visual Basic)