Gewusst wie: Zugreifen auf eine Variable, die von einer abgeleiteten Klasse ausgeblendet wird
Aktualisiert: November 2007
Wenn der Code in einer abgeleiteten Klasse auf eine Variable zugreift, löst der Compiler den Verweis in der Regel in die nächste Version auf, auf die zugegriffen werden kann, das heißt in die verwendbare Version, die die wenigsten Ableitungsschritte zurück von der zugreifenden Klasse liegt. Wenn die Variable in der abgeleiteten Klasse definiert ist, greift der Code normalerweise auf diese Definition zu.
Wenn die Variable einer abgeleiteten Klasse ein Shadowing einer Variablen in der Basisklasse durchführt, wird die Version der Basisklasse ausgeblendet. Sie können jedoch auf die Basisklassenvariable zugreifen, indem Sie sie mit dem MyBase-Schlüsselwort qualifizieren.
So greifen Sie auf eine von einer abgeleiteten Klasse ausgeblendete Basisklassenvariable zu
Stellen Sie in einem Ausdruck oder einer Zuweisungsanweisung das MyBase-Schlüsselwort und einen Punkt (.) vor den Variablennamen.
Der Compiler löst den Verweis in die Basisklassenversion der Variablen auf.
Im folgenden Beispiel wird Shadowing durch Vererbung illustriert. Es gibt zwei Verweise: einen, der auf die Shadowingvariable 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 vorhergehenden Beispiel wird die shadowString-Variable in der Basisklasse deklariert und ein Shadowing der Variablen in der abgeleiteten Klasse durchgeführt. Die showStrings-Prozedur in der abgeleiteten Klasse zeigt die Shadowingversion der Zeichenfolge an, wenn der shadowString-Name nicht qualifiziert ist. Sie zeigt dann die Variable an, für die ein Shadowing durchgeführt wurde, wenn shadowString mit dem MyBase-Schlüsselwort qualifiziert wird.
Robuste Programmierung
Damit möglichst nicht auf eine unerwünschte Version einer Variablen verwiesen wird, für die ein Shadowing durchgeführt wurde, können Sie alle Verweise auf eine solche Variable vollständig qualifizieren. Shadowing führt mehr als eine Version einer Variablen mit dem gleichen Namen ein. Wenn eine Codeanweisung auf einen Variablennamen verweist, richtet sich die Version, in die der Compiler den Verweis auflöst, nach Faktoren wie der Position der Codeanweisung und dem Vorhandensein einer qualifizierenden Zeichenfolge. Dies kann das Risiko erhöhen, auf die falsche Version der Variablen zu verweisen.
Siehe auch
Aufgaben
Gewusst wie: Unterscheiden zwischen zwei Elementen mit dem gleichen Namen
Gewusst wie: Ausblenden einer Variablen mit dem gleichen Namen wie die aktuelle Variable
Gewusst wie: Ausblenden einer geerbten Variablen
Konzepte
Auflösen eines Verweises bei mehreren Variablen mit gleichem Namen
Unterschiede zwischen Shadowing und Überschreiben