Freigeben über


Vorgehensweise: Ausblenden einer Variable mit demselben Namen wie Ihre Variable (Visual Basic)

Sie können eine Variable ausblenden, indem Sie sie schatten , d. h. durch Neudefinieren einer Variablen mit demselben Namen. Sie können die Variable schattieren, die Sie ausblenden möchten, auf zwei Arten:

  • 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.

  • Schattenbildung durch Vererbung Wenn die variable, die Sie ausblenden möchten, auf Klassenebene definiert ist, können Sie sie durch vererbung schatten, indem Sie sie mit dem Schlüsselwort Shadows in einer abgeleiteten Klasse neu definieren.

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, der die Variable definiert, die Sie ausblenden möchten, und bestimmen Sie einen Unterbereich, in dem sie mit Der Variablen neu definiert werden soll.

    Region der Variablen Zulässiger Unterbereich für die Neudefinition
    Modul Eine Klasse innerhalb des Moduls
    Klasse Eine Unterklasse innerhalb der Klasse

    Eine Prozedur innerhalb der Klasse

    Sie können eine Prozedurvariable in einem Block innerhalb dieser Prozedur nicht neu definieren, z. B. in einer If...End If -Konstruktion oder 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 des Unterbereichs auf den Variablennamen verweist, löst der Compiler den Verweis auf die Schattenvariable 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 schattiert die Variable num auf Modulebene innerhalb show, sodass die lokale Variable auf 2 festgelegt ist. Es gibt jedoch keine lokale Variable in der num-Prozedur, die useModuleLevelNum verdeckt. useModuleLevelNum Legt daher 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 einer Prozedur) deklariert ist. Andernfalls können Sie kein Shadowing durch Vererbung für sie durchführen.

  2. Definieren Sie eine von der Variablenklasse abgeleitete Klasse, wenn sie noch nicht vorhanden ist.

  3. Schreiben Sie innerhalb der abgeleiteten Klasse eine Dim Anweisung, die Die 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 auf die Variable auf.

    Das folgende Beispiel veranschaulicht das Shadowing durch Vererbung. Es erstellt zwei Verweise, eine, die auf die Schattenvariable zugreift und eine, die die Schattenung 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 schattiert. Die Prozedur showStrings in der abgeleiteten Klasse zeigt die Schattenversion der Zeichenfolge an, wenn der Name shadowString nicht qualifiziert ist. Anschließend wird die schattierte Version angezeigt, wenn shadowString mit dem MyBase Schlüsselwort qualifiziert wird.

Robuste Programmierung

Bei der Schattenerstellung werden mehrere Versionen einer Variablen mit demselben Namen eingeführt. Wenn sich eine Code-Anweisung auf den Variablennamen bezieht, hängt die Version, auf die der Compiler den Verweis auflöst, von Faktoren wie dem Ort der Code-Anweisung und dem Vorhandensein einer qualifizierenden Zeichenfolge ab. Dies kann das Risiko erhöhen, auf eine unbeabsichtigte Version einer abgeschatteten Variablen zu verweisen. Sie können dieses Risiko verringern, indem Sie alle Verweise auf eine schattierte Variable vollständig qualifizieren.

Siehe auch