Share via


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

  1. Ermitteln Sie die Stelle, an der das Element definiert wurde. Diese Angabe kann einen Namespace oder sogar eine Hierarchie von Namespaces beinhalten. Innerhalb des Namespaces der untersten Ebene muss das Element in einem Modul, einer Klasse oder Struktur enthalten sein.

    ' Assume the following hierarchy exists outside your code.
    Namespace outerSpace
        Namespace innerSpace
            Module holdsTotals
                Public Structure totals
                    Public thisTotal As Integer
                    Public Shared grandTotal As Long
                End Structure
            End Module
        End Namespace
    End Namespace
  2. Legen Sie auf der Grundlage der Position des Zielelements einen Qualifizierungspfad fest. Sie beginnen mit dem Namespace der obersten Ebene, fahren fort bis zum Namespace der untersten Ebene und beenden die Angabe mit dem Modul, der Klasse oder Struktur, das bzw. die das Zielelement enthält. Jedes Element im Pfad muss das ihm nachfolgende Element enthalten.

    outerSpace → innerSpace → holdsTotals → totals

  3. Stellen Sie den Qualifizierungspfad für das Zielelement zusammen. Fügen Sie nach jedem Pfadelement einen Punkt (.) ein. Die Anwendung muss Zugriff auf jedes Element im Qualifizierungspfad haben.

    outerSpace.innerSpace.holdsTotals.totals.
  4. Erstellen Sie den Ausdruck oder die Zuweisungsanweisung. Verweisen Sie dabei in der üblichen Weise auf das Zielelement.

    grandTotal = 9000
  5. Stellen Sie den Qualifizierungspfad dem Namen des Zielelements voran. Der Name muss unmittelbar nach dem Punkt (.) angegeben werden, der dem Modul, der Klasse oder Struktur folgt, das bzw. die das Element enthält.

    ' Assume the following module is part of your code.
    Module accessGrandTotal
        Public Sub setGrandTotal()
            outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000
        End Sub
    End Module
  6. Der Compiler sucht anhand des Qualifizierungspfads eine klare, eindeutige Deklaration, der der Verweis auf das Zielelement zugeordnet werden kann.

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 (System.Windows.Forms.Label und System.Web.UI.WebControls.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)

Operator New (Visual Basic)

Public (Visual Basic)

Konzepte

Namen deklarierter Elemente (Visual Basic)

Merkmale deklarierter Elemente (Visual Basic)

Variablen in Visual Basic