Procedure: Een variabele verbergen met dezelfde naam als uw variabele (Visual Basic)
U kunt een variabele verbergen door deze te schaduwen , dat wil gezegd door deze opnieuw te definiëren met een variabele met dezelfde naam. U kunt de variabele die u wilt verbergen op twee manieren schaduw geven:
Schaduw door bereik. U kunt het bereik schaduwen door deze opnieuw te declareren in een subregio van de regio met de variabele die u wilt verbergen.
Schaduw door overname. Als de variabele die u wilt verbergen, is gedefinieerd op klasseniveau, kunt u deze schaduwen via overname door deze opnieuw te declareren met het trefwoord Schaduwen in een afgeleide klasse.
Twee manieren om een variabele te verbergen
Een variabele verbergen door deze te schaduwen via het bereik
Bepaal de regio die de variabele definieert die u wilt verbergen en bepaal een subregio waarin u deze opnieuw wilt definiëren met uw variabele.
Regio van variabele Toegestane subregio voor het opnieuw definiëren ervan Module Een klasse in de module Klas Een subklasse binnen de klasse
Een procedure binnen de klasseU kunt een procedurevariabele niet opnieuw definiëren in een blok binnen die procedure, bijvoorbeeld in een
If
...End If
constructie of eenFor
lus.Maak de subregio als deze nog niet bestaat.
Schrijf in de subregio een Dim-instructie die de schaduwvariabele declareren.
Wanneer code in de subregio verwijst naar de naam van de variabele, wordt de verwijzing naar de schaduwvariabele door de compiler omgezet.
In het volgende voorbeeld ziet u schaduw door het bereik, evenals een verwijzing die de schaduw omzeilt.
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
In het voorgaande voorbeeld wordt de variabele
num
zowel op moduleniveau als op procedureniveau (in de procedureshow
) gede declareren. De lokale variabelenum
schaduwt de variabelenum
show
op moduleniveau, dus de lokale variabele is ingesteld op 2. Er is echter geen lokale variabele voor schaduwnum
in deuseModuleLevelNum
procedure.useModuleLevelNum
Stelt daarom de waarde van de variabele op moduleniveau in op 1.De
MsgBox
aanroep in de aanroepshow
omzeilt het schaduwmechanisme door in aanmerking te komennum
met de modulenaam. Daarom wordt de variabele op moduleniveau weergegeven in plaats van de lokale variabele.
Een variabele verbergen door deze te schaduwen via overname
Zorg ervoor dat de variabele die u wilt verbergen, is gedeclareerd in een klasse en op klasseniveau (buiten elke procedure). Anders kunt u deze niet schaduwen door overname.
Definieer een klasse die is afgeleid van de klasse van de variabele als deze nog niet bestaat.
Schrijf in de afgeleide klasse een
Dim
instructie die uw variabele declareren. Neem het trefwoord Schaduwen op in de declaratie.Wanneer code in de afgeleide klasse verwijst naar de naam van de variabele, wordt de verwijzing naar uw variabele omgezet door de compiler.
In het volgende voorbeeld ziet u schaduw door overname. Het maakt twee verwijzingen, een die toegang heeft tot de schaduwvariabele en een die de schaduw omzeilt.
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
Het voorgaande voorbeeld declareert de variabele
shadowString
in de basisklasse en schaduwt deze in de afgeleide klasse. De procedureshowStrings
in de afgeleide klasse geeft de schaduwversie van de tekenreeks weer wanneer de naamshadowString
niet is gekwalificeerd. Vervolgens wordt de schaduwversie weergegeven wanneershadowString
deze wordt gekwalificeerd met hetMyBase
trefwoord.
Robuuste programmering
Schaduwen introduceert meer dan één versie van een variabele met dezelfde naam. Wanneer een code-instructie verwijst naar de naam van de variabele, is de versie waarnaar de compiler de verwijzing oplost afhankelijk van factoren zoals de locatie van de code-instructie en de aanwezigheid van een in aanmerking komende tekenreeks. Dit kan het risico verhogen dat wordt verwezen naar een onbedoelde versie van een schaduwvariabele. U kunt dit risico verlagen door alle verwijzingen naar een schaduwvariabele volledig in aanmerking te komen.
Zie ook
- Verwijzingen naar gedeclareerde elementen
- Schaduw in Visual Basic
- Verschillen tussen schaduw en overschrijven
- Procedure: Een overgenomen variabele verbergen
- Procedure: toegang krijgen tot een variabele die is verborgen door een afgeleide klasse
- Overschrijft
- Ik, My, MyBase en MyClass
- Basisprincipes van overname