Namespace-Anweisung

Deklariert den Namen eines Namespace und führt dazu, dass der Quellcode nach der Deklaration in diesem Namespace kompiliert wird.

Syntax

Namespace [Global.] { name | name.name }
    [ componenttypes ]
End Namespace

Bestandteile

Global (optional). Ermöglicht es Ihnen, einen Namespace aus dem Stammnamespace des Projekts zu definieren. Siehe Namespaces in Visual Basic

name ist erforderlich. Ein eindeutiger Name, der den Namespace identifiziert. Muss ein gültiger Visual Basic-Bezeichner sein. Weitere Informationen finden Sie unter Namen deklarierter Elemente.

componenttypes ist optional. Elemente, aus denen der Namespace besteht. Dazu gehören u. a. Enumerationen, Strukturen, Schnittstellen, Klassen, Module, Delegaten und andere Namespaces.

End Namespace beendet einen Namespace-Block.

Bemerkungen

Namespaces werden als Organisationssystem verwendet. Sie bieten eine Möglichkeit, Programmierelemente zu klassifizieren und darzustellen, die anderen Programmen und Anwendungen zur Verfügung gestellt werden. Beachten Sie, dass ein Namespace kein Typ im Sinne einer Klasse oder Struktur ist. Sie können ein Programmierelement nicht mit dem Datentyp „Namespace“ deklarieren.

Alle nach einer Namespace-Anweisung deklarierten Programmierelemente gehören zu diesem Namespace. Visual Basic kompiliert weiterhin Elemente in den zuletzt deklarierten Namespace, bis es auf eine End Namespace-Anweisung oder eine andere Namespace-Anweisung trifft.

Wenn ein Namespace bereits definiert ist – auch außerhalb Ihres Projekts –, können Sie diesem Programmierelemente hinzufügen. Dazu verwenden Sie eine Namespace-Anweisung, um Visual Basic anzuweisen, Elemente in diesen Namespace zu kompilieren.

Sie können eine Namespace-Anweisung nur auf Datei- oder Namespaceebene verwenden. Der Deklarationskontext für einen Namespace muss demnach eine Quelldatei oder ein anderer Namespace sein und darf nicht eine Klasse, Struktur, ein Modul, eine Schnittstelle oder eine Prozedur sein. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Sie können einen Namespace innerhalb eines anderen deklarieren. Es gibt keinen festen Grenzwert für die Ebenen der Schachtelung, die Sie deklarieren können. Denken Sie aber an Folgendes: Wenn anderer Code auf die im innersten Namespace deklarierten Elemente zugreift, muss eine Qualifizierungszeichenfolge verwendet werden, die alle Namespacenamen in der Schachtelungshierarchie enthält.

Zugriffsebene

Namespaces werden behandelt, als hätten sie die Zugriffsebene Public. Auf einen Namespace kann über Code überall im selben Projekt, über andere Projekte, die auf das Projekt verweisen, und über jede Assembly zugegriffen werden, die aus dem Projekt erstellt wurde.

Programmierelemente, die auf Namespaceebene deklariert werden (d. h. in einem Namespace, aber nicht innerhalb eines anderen Elements), können Zugriff vom Typ Public oder Friend haben. Wenn keine Angabe erfolgt, wird als Zugriffsebene eines solchen Elements standardmäßig Friend verwendet. Zu den Elementen, die Sie auf Namespaceebene deklarieren können, gehören Klassen, Strukturen, Module, Schnittstellen, Enumerationen und Delegaten. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Stammnamespace

Alle Namespacenamen in Ihrem Projekt basieren auf einem Stammnamespace. Visual Studio weist den Projektnamen als den Standard-Stammnamespace für den gesamten Code des Projekts zu. Wenn Ihr Projekt beispielsweise den Namen Payrollhat, gehören die Programmierelemente zum Namespace Payroll. Wenn Sie Namespace funding deklarieren, ist der vollständige Name dieses Namespace Payroll.funding.

Wenn Sie einen vorhandenen Namespace in einer Namespace-Anweisung angeben möchten, etwa wie im Beispiel für die generische List-Klasse, können Sie Ihren Stammnamespace auf einen NULL-Wert festlegen. Klicken Sie hierzu im Menü Projekt auf Projekteigenschaften, und löschen Sie dann den Eintrag für Stammnamespace, sodass das Feld leer ist. Wenn Sie diesen Schritt im Beispiel für die generische List-Klasse nicht ausgeführt haben, verwendet der Visual Basic-Compiler System.Collections.Generic als neuen Namespace innerhalb des Projekts Payroll mit dem vollständigen Namen Payroll.System.Collections.Generic.

Alternativ können Sie das Schlüsselwort Global verwenden, um auf Elemente von Namespaces zu verweisen, die außerhalb Ihres Projekts definiert wurden. So können Sie Ihren Projektnamen als Stammnamespace beibehalten. Dadurch wird die Wahrscheinlichkeit verringert, dass Ihre Programmierelemente unbeabsichtigt mit den Elementen vorhandener Namespaces zusammengeführt werden. Weitere Informationen finden Sie unter Namespaces in Visual Basic im Abschnitt „Das Schlüsselwort „global“ in vollqualifizierten Namen“.

Das Schlüsselwort Global kann auch in einer Namespace-Anweisung verwendet werden. Dadurch können Sie einen Namespace aus dem Stammnamespace des Projekts definieren. Weitere Informationen finden Sie unter Namespaces in Visual Basic im Abschnitt „Global-Schlüsselwort in Namespace-Anweisungen“.

Problembehandlung. Der Stammnamespace kann zu unerwarteten Verkettungen von Namespacenamen führen. Wenn Sie auf Namespaces verweisen, die außerhalb Ihres Projekts definiert sind, kann der Visual Basic-Compiler diese als geschachtelte Namespaces im Stammnamespace interpretieren. In einem solchen Fall erkennt der Compiler keine Typen, die bereits in den externen Namespaces definiert wurden. Um dies zu vermeiden, legen Sie entweder Ihren Stammnamespace auf einen NULL-Wert fest, wie unter „Stammnamespace“ beschrieben, oder verwenden Sie das Schlüsselwort Global, um auf Elemente externer Namespaces zuzugreifen.

Attribute und Modifizierer

Sie können keine Attribute auf einen Namespace anwenden. Ein Attribut enthält ergänzende Informationen zu den Metadaten der Assembly, was für Quellklassifizierer wie Namespaces nicht von Bedeutung ist.

Sie können keine Zugriffs- oder Prozedurmodifizierer oder andere Modifizierer auf einen Namespace anwenden. Da es sich nicht um einen Typ handelt, sind diese Modifizierer nicht von Bedeutung.

Beispiel 1

Im folgenden Beispiel werden zwei Namespaces deklariert, wobei einer im anderen geschachtelt ist:

Namespace n1
    Namespace n2
        Class a
            ' Insert class definition.
        End Class
    End Namespace
End Namespace

Beispiel 2

Im folgenden Beispiel werden mehrere geschachtelte Namespaces in einer einzelnen Zeile deklariert. Dies entspricht dem vorherigen Beispiel:

Namespace n1.n2
    Class a
        ' Insert class definition.
    End Class
End Namespace

Beispiel 3

Im folgenden Beispiel wird auf die in den vorherigen Beispielen definierte Klasse zugegriffen:

Dim instance As New n1.n2.a

Beispiel 4

Im folgenden Beispiel wird das Gerüst einer neuen generischen List-Klasse definiert und dem Namespace System.Collections.Generic hinzugefügt:

Namespace System.Collections.Generic
    Class specialSortedList(Of T)
        Inherits List(Of T)
        ' Insert code to define the special generic list class.
    End Class
End Namespace

Siehe auch