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 ProzedurshowStrings
in der abgeleiteten Klasse zeigt die das Shadowing durchführende Version der Zeichenfolge an, wenn der NameshadowString
nicht qualifiziert ist. Anschließend wird die dem Shadowing unterzogene Version angezeigt, wennshadowString
mit dem SchlüsselwortMyBase
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
- References to Declared Elements
- Shadowing in Visual Basic
- Unterschiede zwischen Shadowing und Überschreiben
- Vorgehensweise: Ausblenden einer Variablen mit dem gleichen Namen wie die aktuelle Variable
- Vorgehensweise: Ausblenden einer geerbten Variablen
- Schatten
- Überschreibt
- Me, My, MyBase und MyClass
- Grundlagen der Vererbung