Verweise auf deklarierte Elemente (Visual Basic)
Wenn im Code auf ein deklariertes Element verwiesen wird, ordnet der Visual Basic-Compiler den Namen im Verweis der entsprechenden Deklaration dieses Namens zu. Wenn mehrere Elemente mit demselben Namen deklariert wurden, können Sie steuern, auf welches dieser Elemente verwiesen werden soll, indem Sie dessen Namen qualifizieren.
Der Compiler versucht, einen Namensverweis einer Namensdeklaration mit dem engsten Bereich zuzuordnen. Das bedeutet, er beginnt mit dem Code, der den Verweis enthält, und arbeitet nacheinander, von innen nach außen, die einzelnen Ebenen der enthaltenden Elemente ab.
Im folgenden Beispiel sehen Sie Verweise auf zwei Variablen mit dem gleichen Namen. Im Beispiel werden zwei Variablen, die beide den Namen totalCount tragen, in unterschiedlichen Bereichsebenen im container-Modul deklariert. Wenn die showCount-Prozedur totalCount ohne Qualifizierung anzeigt, löst der Visual Basic-Compiler den Verweis in die Deklaration mit dem engsten Gültigkeitsbereich auf, nämlich die lokale Deklaration in showCount. Wenn totalCount mit dem enthaltenden Modul container qualifiziert wird, löst der Compiler den Verweis in die Deklaration mit dem weiteren Bereich auf.
' Assume these two modules are both in the same assembly.
Module container
Public totalCount As Integer = 1
Public Sub showCount()
Dim totalCount As Integer = 6000
' The following statement displays the local totalCount (6000).
MsgBox("Unqualified totalCount is " & CStr(totalCount))
' The following statement displays the module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Module callingModule
Public Sub displayCount()
container.showCount()
' The following statement displays the containing module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Qualifizieren eines Elementnamens
Wenn Sie diesen Suchprozess überschreiben und einen Namen angeben möchten, der in einem weiteren Gültigkeitsbereich deklariert wurde, müssen Sie den Namen mit dem enthaltenden Element des weiteren Gültigkeitsbereichs qualifizieren. In manchen Fällen muss auch das enthaltende Element qualifiziert werden.
"Qualifizieren eines Namens" bedeutet, dass Sie dem Namen in der Codeanweisung Informationen voranstellen, die angeben, wo das Zielelement definiert ist. Diese Informationen werden als Qualifizierungspfad bezeichnet. Diese Angabe kann einen oder mehrere Namespaces und ein Modul, eine Klasse oder Struktur enthalten.
Der Qualifizierungspfad muss das Modul, die Klasse oder Struktur, das bzw. die das Zielelement enthält, eindeutig angeben. Der Container kann sich wiederum in einem anderen enthaltenden Element befinden, meist einem Namespace. Unter Umständen müssen Sie mehrere enthaltende Elemente in den Qualifizierungspfad aufnehmen.
So greifen Sie auf ein deklariertes Element zu, indem Sie seinen Namen qualifizieren |
|
Wenn die Anwendung Zugriff auf mehrere Programmierelemente mit dem gleichen Namen hat, müssen Sie unter Umständen auch einen Namensverweis qualifizieren. Der System.Windows.Forms-Namespace und der System.Web.UI.WebControls-Namespace enthalten z. B. beide eine Label-Klasse (Label und Label). Wenn in der Anwendung beide verwendet werden oder eine eigene Label-Klasse definiert wird, müssen die verschiedenen Label-Objekte voneinander unterschieden werden. Geben Sie den Namespace oder den Importalias in der Variablendeklaration an. Im folgenden Beispiel wird der Importalias verwendet.
' The following statement must precede all your declarations.
Imports win = System.Windows.Forms, web = System.Web.UI.WebControls
' The following statement references the Windows.Forms.Label class.
Dim winLabel As New win.Label()
Member anderer enthaltender Elemente
Wenn Sie einen nicht freigegebenen Member einer anderen Klasse oder Struktur verwenden, müssen Sie den Membernamen zunächst mit einer Variablen oder einem Ausdruck qualifizieren, der auf eine Instanz der entsprechenden Klasse bzw. Struktur verweist. Im folgenden Beispiel ist demoClass eine Instanz einer Klasse mit der Bezeichnung class1.
Dim demoClass As class1 = New class1()
demoClass.someSub[(argumentlist)]
Sie können nicht den Klassennamen selbst verwenden, um einen Member zu qualifizieren, der nicht als Shared (Visual Basic) deklariert wurde. Sie müssen zunächst eine Instanz in einer Objektvariablen erstellen (in diesem Fall demoClass) und anschließend mit dem Variablennamen darauf verweisen.
Wenn eine Klasse oder Struktur einen Shared-Member besitzt, können Sie diesen Member entweder mit dem Klassen- oder Strukturnamen oder mit einer Variablen oder einem Ausdruck qualifizieren, der auf eine Instanz verweist.
Ein Modul besitzt keine separaten Instanzen, und alle Member sind standardmäßig Shared. Deshalb qualifizieren Sie einen Modulmember mit dem Modulnamen.
Im folgenden Beispiel werden qualifizierte Verweise auf Modulmemberprozeduren gezeigt. Im Beispiel werden zwei Sub-Prozeduren, die beide den Namen perform tragen, in verschiedenen Modulen eines Projekts deklariert. Beide können innerhalb des eigenen Moduls ohne zusätzliche Qualifizierung angegeben werden, bei einem Verweis von einer anderen Stelle aus müssen sie jedoch qualifiziert werden. Da der letzte Verweis in module3 perform nicht qualifiziert, kann der Compiler diesen Verweis nicht auflösen.
' Assume these three modules are all in the same assembly.
Module module1
Public Sub perform()
MsgBox("module1.perform() now returning")
End Sub
End Module
Module module2
Public Sub perform()
MsgBox("module2.perform() now returning")
End Sub
Public Sub doSomething()
' The following statement calls perform in module2, the active module.
perform()
' The following statement calls perform in module1.
module1.perform()
End Sub
End Module
Module module3
Public Sub callPerform()
' The following statement calls perform in module1.
module1.perform()
' The following statement makes an unresolvable name reference
' and therefore generates a COMPILER ERROR.
perform() ' INVALID statement
End Sub
End Module
Verweise auf Projekte
Um Public (Visual Basic)-Elemente zu verwenden, die in einem anderen Projekt definiert wurden, müssen Sie zunächst einen Verweis auf die Assembly oder die Typbibliothek dieses Projekts festlegen. Wenn Sie einen Verweis festlegen möchten, klicken Sie im Menü Projekt auf die Auswahl Verweis hinzufügen, oder verwenden Sie die Option /reference (Visual Basic) des Befehlszeilencompilers.
Sie können beispielsweise das XML-Objektmodell von .NET Framework verwenden. Wenn Sie einen Verweis auf den System.Xml-Namespace festlegen, können Sie alle seine Klasse deklarieren und verwenden, z. B. XmlDocument. Im folgenden Beispiel wird XmlDocument verwendet.
' Assume this project has a reference to System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As System.Xml.XmlDocument
Importieren von enthaltenden Elementen
Sie können Imports-Anweisung (.NET-Namespace und Typ) zum Importieren der Namespaces verwenden, die die zu verwendenden Module oder Klassen enthalten. Dies ermöglicht einen Verweis auf die in einem importierten Namespace definierten Elemente ohne vollständige Qualifizierung ihrer Namen. Im folgenden Beispiel wird das vorhergehende Beispiel neu geschrieben, um den System.Xml-Namespace zu importieren.
' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As XmlDocument
Darüber hinaus kann die Imports-Anweisung einen Importalias für jeden importierten Namespace definieren. Dadurch kann der Quellcode verkürzt und somit leichter lesbar gestaltet werden. Im folgenden Beispiel wird das vorhergehende Beispiel neu geschrieben, um xD als Alias für den System.Xml-Namespace zu verwenden.
' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports xD = System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As xD.XmlDocument
Mit der Imports-Anweisung werden Ihrer Anwendung keine Elemente aus anderen Projekten zur Verfügung gestellt. Das heißt, sie ersetzt nicht das Festlegen eines Verweises. Der Import eines Namespace befreit lediglich von der Erfordernis, die in diesem Namespace definierten Namen zu qualifizieren.
Sie können die Imports-Anweisung auch dazu verwenden, Module, Klassen, Strukturen und Enumerationen zu importieren. Danach können die Member der importierten Elemente ohne Qualifizierung verwendet werden. Nicht freigegebene Member von Klassen und Strukturen müssen allerdings immer mit einer Variablen oder einem Ausdruck qualifiziert werden, der eine Instanz dieser Klasse oder Struktur auswertet.
Richtlinien für die Benennung
Wenn Sie zwei oder mehr Programmierelemente mit demselben Namen definieren, kann dies zu einer Namensmehrdeutigkeit führen, wenn der Compiler versucht, einen Verweis zu diesem Namen aufzulösen. Wenn sich mehrere Definitionen oder gar keine Definition im Gültigkeitsbereich befinden, kann der Verweis nicht aufgelöst werden. Ein Beispiel finden Sie unter "Beispiel eines qualifizierten Verweises " auf dieser Hilfeseite.
Eine Namensmehrdeutigkeit kann verhindert werden, indem Sie allen Elementen eindeutige Namen zuweisen. Auf diese Weise können Sie auf ein beliebiges Element verweisen, ohne seinen Namen mit einem Namespace, einem Modul oder einer Klasse zu qualifizieren. Sie reduzieren auch die Wahrscheinlichkeit, versehentlich auf das falsche Element zu verweisen.
Shadowing
Wenn zwei Programmierelemente denselben Namen haben, kann eines das andere verdecken, bzw. Shadowing durchführen. Ein Element, für das ein Shadowing durchgeführt wurde, ist für Verweise nicht verfügbar. Stattdessen löst der Visual Basic-Compiler den Verweis in das Shadowingelement auf, wenn der Code den Namen des Shadowingelements verwendet. Eine genauere Erläuterung mit Beispielen finden Sie unter Shadowing in Visual Basic.
Siehe auch
Aufgaben
Gewusst wie: Ändern von Projekteigenschaften und Konfigurationseinstellungen
Referenz
Imports-Anweisung (.NET-Namespace und Typ)
Konzepte
Namen deklarierter Elemente (Visual Basic)