Namespace-Anweisung

Aktualisiert: November 2007

Deklariert den Namen eines Namespaces und bewirkt, dass der auf die Deklaration folgende Quellcode in diesem Namespace kompiliert wird.

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

Bestandteile

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

  • componenttypes
    Optional. Elemente, aus denen sich der Namespace zusammensetzt. Dazu gehören u. a. Enumerationen, Strukturen, Schnittstellen, Klassen, Module, Delegaten und andere Namespaces.

  • End Namespace
    Beendet einen Namespace-Block.

Hinweise

Namespaces fungieren als Organisationssystem. Sie bieten eine Möglichkeit zum Klassifizieren und Darstellen von Programmierelementen, die für andere Programme und Anwendungen verfügbar gemacht werden. Beachten Sie, dass ein Namespace kein Typ in dem Sinn ist, in dem eine Klasse oder Struktur ein Typ ist – Sie können ein Programmierelement nicht mit einem Datentyp Namespace deklarieren.

Sie können eine Namespace-Anweisung nur auf Datei- oder Namespaceebene verwenden. Dies bedeutet, dass der Deklarationskontext für einen Namespace eine Quelldatei oder ein anderer Namespace sein muss und keine Klasse, keine Struktur, kein Modul, keine Schnittstelle und keine Prozedur sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Namespaces werden wie Elemente behandelt, deren Zugriffsebene Public ist. Auf einen Namespace kann von Code an einer beliebigen Stelle in demselben Projekt, von anderen Projekten, die auf dieses Projekt verweisen, und von einer aus dem Projekt erstellten Assembly aus zugegriffen werden.

Regeln

  • Attribute. Sie können auf einen Namespace keine Attribute anwenden. Ein Attribut fügt den Metadaten einer Assembly Informationen hinzu. Dies ist für Herkunftsklassifizierer wie Namespaces nicht sinnvoll.

  • Modifizierer. Sie können auf einen Namespace weder Zugriffs- noch Prozedurmodifizierer oder andere Modifizierer anwenden. Da ein Namespace kein Typ ist, sind diese Modifizierer nicht sinnvoll.

  • Schachtelung. Sie können einen Namespace in einem anderen Namespace deklarieren. Die Anzahl der Schachtelungsebenen, die Sie deklarieren können, ist nicht streng begrenzt, allerdings sollten Sie Folgendes beachten: Wenn anderer Code auf die im innersten Namespace deklarierten Elemente zugreift, muss ein Qualifizierungspfad verwendet werden, der alle Namespacenamen der Schachtelungshierarchie enthält.

Verhalten

  • Zugriffsebene. Programmierelemente, die auf Namespaceebene deklariert sind, d. h. in einem Namespace, jedoch in keinem anderen Element, können Public-Zugriff oder Friend-Zugriff aufweisen. Wenn keine Zugriffsebene angegeben wurde, ist die Standardzugriffsebene eines solchen Elements Friend. Zu den Elementen, die Sie auf Namespaceebene deklarieren können, zählen Klassen, Strukturen, Module, Schnittstellen, Enumerationen und Delegaten. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

  • Kompilierung. Alle Programmierelemente, die nach einer Namespace-Anweisung deklariert werden, gehören zu diesem Namespace. Visual Basic kompiliert Elemente in den zuletzt deklarierten Namespace, bis entweder eine End Namespace-Anweisung oder eine andere Namespace-Anweisung auftritt.

  • Hinzufügen von Elementen zu einem Namespace. Wenn ein Namespace bereits definiert ist, auch außerhalb des Projekts, können Sie diesem Programmierelemente hinzufügen. Hierzu verwenden Sie eine Namespace-Anweisung, damit Visual Basic die folgenden Elemente in diesen Namespace kompiliert.

    Im folgenden Beispiel wird das Skelett einer neuen generischen Listenklasse definiert und dem System.Collections.Generic-Namespace 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
    
  • Stammnamespace. Alle Namespacenamen im Projekt beruhen auf einem Stammnamespace. Visual Studio weist den Projektnamen als Standardstammnamespace für den gesamten Code in diesem Projekt zu. Wenn der Name des Projekts z. B. Payroll lautet, gehören die Programmierelemente des Projekts zu dem Namespace Payroll. Wenn Sie Namespace funding deklarieren, ist der vollständige Name dieses Namespaces Payroll.funding.

    Wenn Sie einen vorhandenen Namespace in einer Namespace-Anweisung angeben möchten, wie z. B. im Beispiel für die generische Listenklasse, können Sie den Stammnamespace auf einen NULL-Wert festlegen. Klicken Sie hierfür im Menü Projekt auf Projekteigenschaften, und löschen Sie den Eintrag Stammnamespace. Wenn Sie diesen Schritt im Beispiel für die generische Listenklasse nicht ausführen, verwendet der Visual Basic-Compiler System.Collections.Generic als neuen Namespace im Projekt Payroll, mit dem vollständigen Namen Payroll.System.Collections.Generic.

    Stattdessen können Sie auch mit dem Global-Schlüsselwort auf Elemente von Namespaces verweisen, die außerhalb des Projekts definiert sind. So kann der Projektname als Stammnamespace beibehalten werden. Hierdurch wird die Wahrscheinlichkeit verringert, dass Ihre Programmierelemente versehentlich mit den Programmierelementen vorhandener Namespaces zusammengeführt werden.

Problembehandlung

  • Nicht definierte Typen. Der Stammnamespace kann zu unerwarteten Verkettungen von Namespacenamen führen. Wenn Sie auf außerhalb des Projekts definierte Namespaces verweisen, können diese vom Visual Basic-Compiler als geschachtelte Namespaces im Stammnamespace interpretiert werden. In diesem Fall erkennt der Compiler keine Typen, die bereits in den externen Namespaces definiert wurden. Um dies zu vermeiden, legen Sie entweder den Stammnamespace auf einen NULL-Wert fest, wie in "Stammnamespace" beschrieben, oder verwenden Sie das Global-Schlüsselwort, um auf Elemente externer Namespaces zuzugreifen.

Beispiel

Im folgenden Beispiel werden zwei ineinander geschachtelte Namespaces deklariert.

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

Im folgenden Beispiel werden mehrere geschachtelte Namespaces in einer einzigen Zeile deklariert. Dieses Beispiel entspricht dem vorherigen Beispiel.

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

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

Dim instance As New n1.n2.a

Siehe auch

Konzepte

Namen deklarierter Elemente

Namespaces in Visual Basic

Referenz

Imports-Anweisung (.NET-Namespace und Typ)

Global