Gewusst wie: Ausblenden einer Variablen mit dem gleichen Namen wie die aktuelle Variable (Visual Basic)
Sie können eine Variable ausblenden, indem Sie ein Shadowing für sie durchführen, d. h., indem Sie sie mit einer gleichnamigen Variablen neu definieren. Für ein Shadowing der Variablen, die Sie ausblenden möchten, gibt es zwei Möglichkeiten:
Shadowing über den Gültigkeitsbereich. Sie können für die Variable ein Shadowing durchführen, indem Sie sie innerhalb eines Unterbereichs des Bereichs neu deklarieren, der die auszublendende Variable enthält.
Shadowing durch Vererbung. Wenn die auszublendende Variable auf Klassenebene definiert ist, können Sie ein Shadowing durch Vererbung ausführen, indem Sie die Variable mit dem Shadows (Visual Basic)-Schlüsselwort in einer abgeleiteten Klasse neu deklarieren.
Ermitteln Sie den Bereich, in dem die auszublendende Variable definiert wird, und ermitteln Sie einen Unterbereich, in dem Sie sie mit Ihrer Variablen neu definieren.
Bereich der Variablen
Zur Neudefinition zulässiger Unterbereich
Modul
Eine Klasse innerhalb des Moduls
Klasse
Eine Unterklasse innerhalb der Klasse
Eine Prozedur innerhalb der Klasse
Es ist nicht möglich, eine Prozedurvariable in einem Block innerhalb dieser Prozedur neu zu definieren, z. B. in einer If...End If-Konstruktion oder in einer For-Schleife.
Erstellen Sie den Unterbereich, wenn dieser noch nicht vorhanden ist.
Erstellen Sie innerhalb des Unterbereichs eine Dim-Anweisung (Visual Basic), mit der die Shadowingvariable deklariert wird.
Wenn Code innerhalb des Unterbereichs auf den Variablennamen verweist, löst der Compiler den Verweis in die Shadowingvariable auf.
Das folgende Beispiel zeigt 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 vorhergehenden Beispiel wird die Variable num sowohl auf Modulebene als auch auf Prozedurebene (in der Prozedur show) deklariert. Mit der lokalen Variablen num wird ein Shadowing für die auf Modulebene angesiedelte Variable num innerhalb von show durchgeführt, sodass die lokale Variable auf 2 gesetzt wird. Es gibt jedoch keine lokale Variable, mit der ein Shadowing für num in der useModuleLevelNum-Prozedur durchgeführt werden kann. Daher wird der Wert der Modulebenenvariablen mit useModuleLevelNum auf 1 gesetzt.
Der MsgBox-Aufruf innerhalb von show umgeht das Shadowing, indem num mit dem Modulnamen qualifiziert wird. Deshalb wird die Modulebenenvariable statt der lokalen Variablen angezeigt.
Stellen Sie sicher, dass die auszublendende Variable in einer Klasse und auf Klassenebene (außerhalb einer Prozedur) deklariert ist. Andernfalls können Sie nicht durch Vererbung ein Shadowing für sie durchführen.
Definieren Sie eine von der Klasse der Variablen abgeleitete Klasse, wenn eine solche Klasse noch nicht existiert.
Erstellen Sie in der abgeleiteten Klasse eine Dim-Anweisung, mit der die Variable deklariert wird. Fügen Sie das Shadows (Visual Basic)-Schlüsselwort in die Deklaration ein.
Wenn Code in der abgeleiteten Klasse auf den Variablennamen verweist, löst der Compiler den Verweis in die Variable auf.
Im folgenden Beispiel wird das Shadowing durch Vererbung veranschaulicht. Es enthält zwei Verweise, einen für den Zugriff auf die Shadowingvariable und einen zur Umgehung des Shadowing.
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 Variable shadowString in der Basisklasse deklariert und in der abgeleiteten Klasse mittels Shadowing ausgeblendet. Die in der abgeleiteten Klasse enthaltene Prozedur showStrings zeigt die Shadowingversion der Zeichenfolge an, wenn der Name shadowString nicht qualifiziert wird. Anschließend wird die Shadowingversion angezeigt, wenn shadowString mit dem MyBase-Schlüsselwort qualifiziert wird.
Durch das Shadowing werden mehrere Versionen einer Variablen mit demselben Namen eingeführt. Wenn eine Codeanweisung auf den Variablennamen verweist, richtet sich die Version, in welche der Compiler den Verweis auflöst, nach Faktoren wie der Position der Codeanweisung und dem Vorhandensein einer qualifizierenden Zeichenfolge. Dadurch kann sich das Risiko erhöhen, auf eine unerwünschte Version einer Variablen zu verweisen, für die ein Shadowing durchgeführt wurde. Sie können dieses Risiko verringern, indem Sie alle Verweise auf eine solche Variable vollständig qualifizieren.
Gewusst wie: Ausblenden einer geerbten Variablen (Visual Basic)
Unterschiede zwischen Shadowing und Überschreiben (Visual Basic)
Me, "My", "MyBase" und "MyClass" in Visual Basic