Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können eine Variable ausblenden, indem Sie sie schatten , d. h. durch Neudefinieren einer Variablen mit demselben Namen. Sie können die Variable schattieren, die Sie ausblenden möchten, auf zwei Arten:
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.
Schattenbildung durch Vererbung Wenn die variable, die Sie ausblenden möchten, auf Klassenebene definiert ist, können Sie sie durch vererbung schatten, indem Sie sie mit dem Schlüsselwort Shadows in einer abgeleiteten Klasse neu definieren.
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, der die Variable definiert, die Sie ausblenden möchten, und bestimmen Sie einen Unterbereich, in dem sie mit Der Variablen neu definiert werden soll.
Region der Variablen Zulässiger Unterbereich für die Neudefinition Modul Eine Klasse innerhalb des Moduls Klasse Eine Unterklasse innerhalb der Klasse
Eine Prozedur innerhalb der KlasseSie können eine Prozedurvariable in einem Block innerhalb dieser Prozedur nicht neu definieren, z. B. in einer
If...End If-Konstruktion oderForSchleife.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 des Unterbereichs auf den Variablennamen verweist, löst der Compiler den Verweis auf die Schattenvariable 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 ModuleIm vorherigen Beispiel wird die Variable
numsowohl auf Modulebene als auch auf Prozedurebene (in der Prozedurshow) deklariert. Die lokale Variablenumschattiert die Variablenumauf Modulebene innerhalbshow, sodass die lokale Variable auf 2 festgelegt ist. Es gibt jedoch keine lokale Variable in dernum-Prozedur, dieuseModuleLevelNumverdeckt.useModuleLevelNumLegt daher den Wert der Variablen auf Modulebene auf 1 fest.Der
MsgBox-Aufruf innerhalb vonshowumgeht den Shadowingmechanismus, indemnummit 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 einer Prozedur) deklariert ist. Andernfalls können Sie kein Shadowing durch Vererbung für sie durchführen.
Definieren Sie eine von der Variablenklasse abgeleitete Klasse, wenn sie noch nicht vorhanden ist.
Schreiben Sie innerhalb der abgeleiteten Klasse eine
DimAnweisung, die Die 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 auf die Variable auf.
Das folgende Beispiel veranschaulicht das Shadowing durch Vererbung. Es erstellt zwei Verweise, eine, die auf die Schattenvariable zugreift und eine, die die Schattenung 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 ClassIm vorherigen Beispiel wird die Variable
shadowStringin der Basisklasse deklariert und in der abgeleiteten Klasse schattiert. Die ProzedurshowStringsin der abgeleiteten Klasse zeigt die Schattenversion der Zeichenfolge an, wenn der NameshadowStringnicht qualifiziert ist. Anschließend wird die schattierte Version angezeigt, wennshadowStringmit demMyBaseSchlüsselwort qualifiziert wird.
Robuste Programmierung
Bei der Schattenerstellung werden mehrere Versionen einer Variablen mit demselben Namen eingeführt. Wenn sich eine Code-Anweisung auf den Variablennamen bezieht, hängt die Version, auf die der Compiler den Verweis auflöst, von Faktoren wie dem Ort der Code-Anweisung und dem Vorhandensein einer qualifizierenden Zeichenfolge ab. Dies kann das Risiko erhöhen, auf eine unbeabsichtigte Version einer abgeschatteten Variablen zu verweisen. Sie können dieses Risiko verringern, indem Sie alle Verweise auf eine schattierte Variable vollständig qualifizieren.
Siehe auch
- Verweise auf deklarierte Elemente
- Schatten in Visual Basic
- Unterschiede zwischen Überschattung und Überschreiben
- Vorgehensweise: Ausblenden einer geerbten Variablen
- Vorgehensweise: Zugreifen auf eine Variable, die von einer abgeleiteten Klasse ausgeblendet wird
- Außerkraftsetzungen
- Me, My, MyBase und MyClass
- Vererbungsgrundlagen