Gewusst wie: Zugreifen auf eine Variable, die von einer abgeleiteten Klasse ausgeblendet wird (Visual Basic)

Wenn Code in einer abgeleiteten Klasse auf eine Variable zugreift, löst der Compiler normalerweise den Verweis auf die nächstgelegene zugängliche Version auf, d. h. die barrierefreie Version die wenigsten Ableitungsschritte rückwärts von der Zugriffsklasse. Wenn die Variable in der abgeleiteten Klasse definiert ist, greift der Code normalerweise auf diese Definition zu.

Wenn die Variable der abgeleiteten Klassen für eine Variable in der Basisklasse ein Shadowing durchführt, blendet sie die Basisklassenversion aus. Sie können jedoch auf die Basisklassenvariable zugreifen, indem Sie sie mit dem MyBase-Schlüsselwort qualifizieren.

So greifen Sie auf eine Variable zu, die von einer abgeleiteten Klasse ausgeblendet wird

  • Stellen Sie in einer Ausdrucks- oder Zuweisungsanweisung dem Variablennamen das MyBase-Schlüsselwort und einen Punkt (.) voran.

    Der Compiler löst den Verweis auf die Basisklassenversion der Variable 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

Um das Risiko zu verringern, auf eine unbeabsichtigte Version einer Variable mit Shadowing zu verweisen, können Sie alle Verweise auf eine Variable mit Shadowing vollständig qualifizieren. 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 die falsche Version der Variablen zu verweisen.

Siehe auch