Gewusst wie: Ausblenden einer Variablen mit dem gleichen Namen wie die aktuelle Variable (Visual Basic)
Sie können eine Variable ausblenden, indem Sie für sie ein Shadowing durchführen, d. h., indem Sie sie mit einer Variablen mit demselben Namen neu definieren. Sie können das Shadowing der Variablen, die Sie ausblenden möchten, auf zwei Arten durchführen:
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.
Shadowing durch Vererbung. Wenn die Variable, die Sie ausblenden möchten, auf Klassenebene definiert ist, können Sie für sie das Shadowing durch Vererbung durchführen, indem Sie sie mit dem Shadows-Schlüsselwort in einer abgeleiteten Klasse neu auswerten.
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
Bestimmen Sie den Bereich, in dem die Variable definiert wird, die Sie ausblenden möchten, und bestimmen Sie einen Unterbereich, in dem sie mit Ihrer Variablen neu definiert werden soll.
Bereich der Variablen Zulässiger Unterbereich zum Neudefinieren der Variablen Modul Eine Klasse innerhalb des Moduls Klasse Eine Unterklasse innerhalb der Klasse
Eine Prozedur innerhalb der KlasseSie können eine Prozedurvariable nicht in einem Block innerhalb dieser Prozedur neu definieren, z. B. in einer
If
...End If
-Konstruktion oder einerFor
-Schleife.Erstellen Sie den Unterbereich, wenn er noch nicht vorhanden ist.
Schreiben Sie innerhalb des Unterbereichs eine Dim-Anweisung, die das Shadowing der Variablen deklariert.
Wenn Code innerhalb der Unterregion auf den Variablennamen verweist, löst der Compiler den Verweis auf die das Shadowing durchführende Variable 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 Prozedurshow
) deklariert. Die lokale Variablenum
führt ein Shadowing der Variablennum
auf Modulebene inshow
durch, sodass die lokale Variable auf 2 festgelegt wird. Es gibt jedoch keine lokale Variable für ein Shadowing vonnum
in deruseModuleLevelNum
-Prozedur. Daher legtuseModuleLevelNum
den Wert der Variablen auf Modulebene auf 1 fest.Der
MsgBox
-Aufruf innerhalb vonshow
umgeht den Shadowingmechanismus, indemnum
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
Stellen Sie sicher, dass die Variable, die Sie ausblenden möchten, in einer Klasse und auf Klassenebene (außerhalb jeglicher Prozedur) deklariert ist. Andernfalls können Sie kein Shadowing durch Vererbung für sie durchführen.
Definieren Sie eine Klasse, die von der Klasse der Variablen abgeleitet wird, wenn noch keine vorhanden ist.
Schreiben Sie in der abgeleiteten Klasse eine
Dim
-Anweisung, die Ihre 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 zu Ihrer Variablen 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
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 eine unbeabsichtigte Version einer einem Shadowing unterzogenen Variablen zu verweisen. Sie können dieses Risiko verringern, indem Sie alle Verweise auf eine dem Shadowing unterzogene Variable vollständig qualifizieren.
Siehe auch
- References to Declared Elements
- Shadowing in Visual Basic
- Unterschiede zwischen Shadowing und Überschreiben
- Vorgehensweise: Ausblenden einer geerbten Variablen
- Vorgehensweise: Zugreifen auf eine Variable, die von einer abgeleiteten Klasse ausgeblendet wird
- Überschreibt
- Me, My, MyBase und MyClass
- Grundlagen der Vererbung