Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
Schaduwen binnen bereik. U kunt het bereik schaduwen door deze opnieuw te declareren in een subregio van de regio met de variabele die u wilt verbergen.
Schaduwwerk door erfenis. 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 binnen de scope
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 Moduul Een klasse in de module Klasse 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 Ifconstructie of eenForlus.Maak de subregio als deze nog niet bestaat.
Schrijf in de subregio een Dim-instructie die de variabele die wordt overschaduwd declareert.
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 schaduwen binnen scope, evenals een verwijzing om het schaduwen te vermijden.
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 ModuleIn het voorgaande voorbeeld wordt de variabele
numzowel op moduleniveau als op procedureniveau (in de procedureshow) gede declareren. De lokale variabelenumschaduwt de variabelenumshowop moduleniveau, dus de lokale variabele is ingesteld op 2. Er is echter geen lokale variabele omnumte schaduwen in deuseModuleLevelNum-procedure.useModuleLevelNumStelt daarom de waarde van de variabele op moduleniveau in op 1.De
MsgBoxaanroep binnenshowomzeilt het schaduwmechanisme doornumte kwalificeren 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
Diminstructie die je variabele declareert. 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 ClassHet voorgaande voorbeeld declareert de variabele
shadowStringin de basisklasse en schaduwt deze in de afgeleide klasse. De procedureshowStringsin de afgeleide klasse geeft de schaduwversie van de tekenreeks weer wanneer de naamshadowStringniet is gekwalificeerd. Vervolgens wordt de schaduwversie weergegeven wanneershadowStringwordt gekwalificeerd met hetMyBasetrefwoord.
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 verminderen door alle verwijzingen naar een schaduwvariabele volledig te kwalificeren.
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
- Overschrijvingen
- Ik, My, MyBase en MyClass
- Basisprincipes van overname