Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Namespaces organisieren die in einer Assembly definierten Objekte. Assemblys können mehrere Namespaces enthalten, die wiederum andere Namespaces enthalten können. Namespaces verhindern Mehrdeutigkeit und vereinfachen Verweise bei verwendung großer Gruppen von Objekten wie Klassenbibliotheken.
Beispielsweise definiert .NET Framework die ListBox Klasse im System.Windows.Forms Namespace. Das folgende Codefragment zeigt, wie eine Variable mit dem vollqualifizierten Namen für diese Klasse deklariert wird:
Dim LBox As System.Windows.Forms.ListBox
Vermeiden von Namenskonflikten
.NET Framework-Namespaces behandeln ein Problem, das manchmal als Namespaceverschmutzung bezeichnet wird, in dem der Entwickler einer Klassenbibliothek durch die Verwendung ähnlicher Namen in einer anderen Bibliothek behindert wird. Diese Konflikte mit vorhandenen Komponenten werden manchmal als Namenskonflikte bezeichnet.
Wenn Sie beispielsweise eine neue Klasse mit dem Namen ListBoxerstellen, können Sie sie in Ihrem Projekt ohne Qualifikation verwenden. Wenn Sie jedoch die .NET Framework-Klasse ListBox im selben Projekt verwenden möchten, müssen Sie einen vollqualifizierten Verweis verwenden, um den Verweis eindeutig zu machen. Wenn der Verweis nicht eindeutig ist, erzeugt Visual Basic einen Fehler, der angibt, dass der Name mehrdeutig ist. Im folgenden Codebeispiel wird veranschaulicht, wie diese Objekte deklariert werden:
' 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
Die folgende Abbildung zeigt zwei Namespacehierarchien, die ein Objekt mit dem Namen ListBoxenthalten:
Standardmäßig enthält jede ausführbare Datei, die Sie mit Visual Basic erstellen, einen Namespace mit demselben Namen wie Ihr Projekt. Wenn Sie z. B. ein Objekt innerhalb eines Projekts mit dem Namen ListBoxProjectdefinieren, enthält die ausführbare Datei ListBoxProject.exe einen Namespace namens ListBoxProject.
Mehrere Assemblys können denselben Namespace verwenden. Visual Basic behandelt sie als eine einzelne Gruppe von Namen. Sie können beispielsweise Klassen für einen Namespace namens SomeNameSpace in einer Assembly mit dem Namen Assemb1 definieren und zusätzliche Klassen für denselben Namespace aus einer Assembly mit dem Namen Assemb2 definieren.
Vollqualifizierte Namen
Vollqualifizierte Namen sind Objektverweise, die dem Namen des Namespaces vorangestellt sind, in dem das Objekt definiert ist. Sie können objekte verwenden, die in anderen Projekten definiert sind, wenn Sie einen Verweis auf die Klasse erstellen (indem Sie im Menü Projekt "Verweis hinzufügen" auswählen) und dann den vollqualifizierten Namen für das Objekt in Ihrem Code verwenden. Das folgende Codefragment zeigt, wie der vollqualifizierte Name für ein Objekt aus dem Namespace eines anderen Projekts verwendet wird:
Dim LBC As New ListBoxProject.Form1.ListBox
Vollqualifizierte Namen verhindern Namenskonflikte, da sie es dem Compiler ermöglichen, zu bestimmen, welches Objekt verwendet wird. Die Namen selbst können jedoch lang und umständlich werden. Um dies zu umgehen, können Sie die Imports Anweisung verwenden, um einen Alias zu definieren – einen abgekürzten Namen, den Sie anstelle eines vollqualifizierten Namens verwenden können. Im folgenden Codebeispiel werden beispielsweise Aliase für zwei vollqualifizierte Namen erstellt und diese Aliase verwendet, um zwei Objekte zu definieren.
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 alle Namen in diesem Namespace ohne Qualifikation verwenden, vorausgesetzt, sie sind für das Projekt eindeutig. Wenn das Projekt Imports -Anweisungen für Namespaces enthält, die Elemente mit gleichem Namen enthalten, müssen Sie Namen, die Sie verwenden, vollständig qualifizieren. Nehmen wir an, das Projekt enthält die folgenden beiden Imports -Anweisungen:
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2
Wenn Sie versuchen, ihn ohne vollständige Qualifizierung zu verwenden Class1 , erzeugt Visual Basic einen Fehler, der angibt, dass der Name Class1 mehrdeutig ist.
Namespaceebenen-Anweisungen
Innerhalb eines Namespaces können Sie Elemente wie Module, Schnittstellen, Klassen, Stellvertretungen, Enumerationen, Strukturen und andere Namespaces definieren. Elemente wie Eigenschaften, Prozeduren, Variablen und Ereignisse können nicht auf Namespaceebene definiert werden. Diese Elemente müssen in Containern wie Modulen, Strukturen oder Klassen deklariert werden.
Das Schlüsselwort „global“ in vollqualifizierten Namen
Wenn Sie eine geschachtelte Hierarchie von Namespaces definiert haben, kann der Zugriff auf den System Namespace von .NET Framework durch Code innerhalb dieser Hierarchie blockiert werden. Das folgende Beispiel veranschaulicht eine Hierarchie, in der der SpecialSpace.System Namensraum 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
Daher kann der Visual Basic-Compiler den Verweis System.Int32 nicht erfolgreich auflösen, weil SpecialSpace.SystemInt32 nicht definiert. Sie können das Global Schlüsselwort verwenden, um die Qualifikationskette auf der äußersten Ebene der .NET Framework-Klassenbibliothek zu starten. Auf diese Weise können Sie den System Namespace oder einen anderen Namespace in der Klassenbibliothek angeben. Im folgenden Beispiel wird dies 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 Namensräume auf Stammebene zuzugreifen, wie z.B. Microsoft.VisualBasic, und alle Namensräume, die Ihrem Projekt zugeordnet sind.
Global-Schlüsselwort in Namespace-Anweisungen
Sie können das Global Schlüsselwort auch in einer Namespace-Anweisung verwenden. Auf diese Weise können Sie einen Namespace aus dem Stammnamespace Ihres Projekts definieren.
Alle Namespaces in Ihrem Projekt basieren auf dem Stammnamespace für das Projekt. Visual Studio weist Den Projektnamen als Standardstammnamespace für den gesamten Code in Ihrem Projekt zu. Wenn Ihr Projekt beispielsweise benannt ConsoleApplication1ist, gehören die Programmierelemente zum Namespace ConsoleApplication1. Wenn Sie Namespace Magnetospheredeklarieren, greifen Verweise auf Magnetosphere im Projekt auf ConsoleApplication1.Magnetospherezu.
In den folgenden Beispielen wird das Global Schlüsselwort verwendet, um einen Namespace aus dem Stammnamespace für das Projekt zu deklarieren.
Namespace Global.Magnetosphere
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
In einer Namespacedeklaration Global kann nicht in einem anderen Namespace geschachtelt werden.
Sie können die Anwendungsseite, Project Designer (Visual Basic) verwenden, um den Stammnamespace des Projekts anzuzeigen und zu ändern. Bei neuen Projekten ist der Stammnamespace standardmäßig auf den Projektnamen festgelegt. Um Global zum Namespace der obersten Ebene zu machen, können Sie den Stammnamespace-Eintrag löschen, damit das Feld leer ist. Durch das Löschen des Stammnamespaces wird die Notwendigkeit des Global Schlüsselworts in Namespacedeklarationen entfernt.
Wenn eine Namespace Anweisung einen Namen deklariert, der auch ein Namespace im .NET Framework ist, wird der .NET Framework-Namespace nicht verfügbar, wenn das Global Schlüsselwort nicht in einem vollqualifizierten Namen verwendet wird. Um den Zugriff auf diesen .NET Framework-Namespace zu ermöglichen, ohne das Global Schlüsselwort zu verwenden, können Sie das Global Schlüsselwort in die Namespace Anweisung einschließen.
Das folgende Beispiel weist das Global Schlüsselwort in der System.Text Namespacedeklaration auf.
Wenn das Global Schlüsselwort in der Namespacedeklaration nicht vorhanden war, kann auf StringBuilder ohne Angabe von Global.System.Text.StringBuilder nicht zugegriffen werden. Bei einem Projekt mit dem Namen ConsoleApplication1 würden Verweise auf System.Text auf ConsoleApplication1.System.Text zugreifen, wenn das Global Schlüsselwort nicht eingesetzt wäre.
Module Module1
Sub Main()
Dim encoding As New System.Text.TitanEncoding
' If the namespace defined below is System.Text
' instead of Global.System.Text, then this statement
' causes a compile-time error.
Dim sb As New System.Text.StringBuilder
End Sub
End Module
Namespace Global.System.Text
Class TitanEncoding
End Class
End Namespace