Teilen über


Gewusst wie: Ausblenden einer Variablen mit dem gleichen Namen wie die aktuelle Variable (Visual Basic)

Sie können eine Variable ausblenden, indem Sie für sie ein Shadowing durchführen, d. h., indem Sie sie mit einer Variablen mit demselben Namen neu definieren. Sie können das Shadowing der Variablen, die Sie ausblenden möchten, auf zwei Arten durchführen:

  • Shadowing über den Gültigkeitsbereich. Sie können für sie das Shadowing über den Gültigkeitsbereich durchführen, indem Sie sie in einem Unterbereich des Bereichs neu deklarieren, der die auszublendende Variable enthält.

  • Shadowing durch Vererbung. Wenn die Variable, die Sie ausblenden möchten, auf Klassenebene definiert ist, können Sie für sie das Shadowing durch Vererbung durchführen, indem Sie sie mit dem Shadows-Schlüsselwort in einer abgeleiteten Klasse neu auswerten.

Zwei Möglichkeiten zum Ausblenden einer Variablen

So blenden Sie eine Variable aus, indem Sie für sie ein Shadowing über den Gültigkeitsbereich durchführen

  1. Bestimmen Sie den Bereich, in dem die Variable definiert wird, die Sie ausblenden möchten, und bestimmen Sie einen Unterbereich, in dem sie mit Ihrer Variablen neu definiert werden soll.

    Bereich der Variablen Zulässiger Unterbereich zum Neudefinieren der Variablen
    Modul Eine Klasse innerhalb des Moduls
    Klasse Eine Unterklasse innerhalb der Klasse

    Eine Prozedur innerhalb der Klasse

    Sie können eine Prozedurvariable nicht in einem Block innerhalb dieser Prozedur neu definieren, z. B. in einer If...End If-Konstruktion oder einer For-Schleife.

  2. Erstellen Sie den Unterbereich, wenn er noch nicht vorhanden ist.

  3. Schreiben Sie innerhalb des Unterbereichs eine Dim-Anweisung, die das Shadowing der Variablen deklariert.

    Wenn Code innerhalb der Unterregion auf den Variablennamen verweist, löst der Compiler den Verweis auf die das Shadowing durchführende Variable auf.

    Das folgende Beispiel veranschaulicht das Shadowing über den Gültigkeitsbereich sowie einen Verweis, der das Shadowing umgeht.

    Module shadowByScope
        ' The following statement declares num as a module-level variable.
        Public num As Integer
        Sub show()
            ' The following statement declares num as a local variable.
            Dim num As Integer
            ' The following statement sets the value of the local variable.
            num = 2
            ' The following statement displays the module-level variable.
            MsgBox(CStr(shadowByScope.num))
        End Sub
        Sub useModuleLevelNum()
            ' The following statement sets the value of the module-level variable.
            num = 1
            show()
        End Sub
    End Module
    

    Im vorherigen Beispiel wird die Variable num sowohl auf Modulebene als auch auf Prozedurebene (in der Prozedur show) deklariert. Die lokale Variable num führt ein Shadowing der Variablen num auf Modulebene in show durch, sodass die lokale Variable auf 2 festgelegt wird. Es gibt jedoch keine lokale Variable für ein Shadowing von num in der useModuleLevelNum-Prozedur. Daher legt useModuleLevelNum den Wert der Variablen auf Modulebene auf 1 fest.

    Der MsgBox-Aufruf innerhalb von show umgeht den Shadowingmechanismus, indem num mit dem Modulnamen qualifiziert wird. Daher wird die Variable auf Modulebene anstelle der lokalen Variablen angezeigt.

So blenden Sie eine Variable aus, indem Sie für sie ein Shadowing durch Vererbung durchführen

  1. Stellen Sie sicher, dass die Variable, die Sie ausblenden möchten, in einer Klasse und auf Klassenebene (außerhalb jeglicher Prozedur) deklariert ist. Andernfalls können Sie kein Shadowing durch Vererbung für sie durchführen.

  2. Definieren Sie eine Klasse, die von der Klasse der Variablen abgeleitet wird, wenn noch keine vorhanden ist.

  3. Schreiben Sie in der abgeleiteten Klasse eine Dim-Anweisung, die Ihre Variable deklariert. Schließen Sie das Schlüsselwort Shadows in die Deklaration ein.

    Wenn Code in der abgeleiteten Klasse auf den Variablennamen verweist, löst der Compiler den Verweis zu Ihrer Variablen auf.

    Das folgende Beispiel veranschaulicht das Shadowing durch Vererbung. Es macht zwei Verweise, einen, der auf die das Shadowing durchführende Variable zugreift, und einen, der das Shadowing umgeht.

    Public Class shadowBaseClass
        Public shadowString As String = "This is the base class string."
    End Class
    Public Class shadowDerivedClass
        Inherits shadowBaseClass
        Public Shadows shadowString As String = "This is the derived class string."
        Public Sub showStrings()
            Dim s As String = "Unqualified shadowString: " & shadowString &
                 vbCrLf & "MyBase.shadowString: " & MyBase.shadowString
            MsgBox(s)
        End Sub
    End Class
    

    Im vorherigen Beispiel wird die Variable shadowString in der Basisklasse deklariert und in der abgeleiteten Klasse ein Shadowing für sie durchgeführt. Die Prozedur showStrings in der abgeleiteten Klasse zeigt die das Shadowing durchführende Version der Zeichenfolge an, wenn der Name shadowString nicht qualifiziert ist. Anschließend wird die dem Shadowing unterzogene Version angezeigt, wenn shadowString mit dem Schlüsselwort MyBase qualifiziert wird.

Stabile Programmierung

Shadowing führt mehr als eine Version einer Variablen mit demselben Namen ein. Wenn eine Codeanweisung auf den Variablennamen verweist, hängt die Version, zu der der Compiler den Verweis auflöst, von Faktoren wie dem Speicherort der Codeanweisung und dem Vorhandensein einer qualifizierenden Zeichenfolge ab. Dies kann das Risiko erhöhen, auf eine unbeabsichtigte Version einer einem Shadowing unterzogenen Variablen zu verweisen. Sie können dieses Risiko verringern, indem Sie alle Verweise auf eine dem Shadowing unterzogene Variable vollständig qualifizieren.

Siehe auch