Delen via


Procedure: Een overgenomen variabele verbergen (Visual Basic)

Een afgeleide klasse neemt alle definities van de basisklasse over. Als u een variabele wilt definiëren met dezelfde naam als een element van de basisklasse, kunt u dat basisklasse-element verbergen of schaduwen wanneer u de variabele in de afgeleide klasse definieert. Als u dit doet, heeft code in de afgeleide klasse toegang tot uw variabele, tenzij deze het schaduwmechanisme expliciet omzeilt.

Een andere reden waarom u een overgenomen variabele wilt verbergen, is om te beschermen tegen revisie van basisklassen. De basisklasse kan een wijziging ondergaan die het element wijzigt dat u overneemt. Als dit gebeurt, dwingt de Shadows wijzigingsfunctie verwijzingen van de afgeleide klasse om te worden omgezet in uw variabele, in plaats van naar het basisklasse-element.

Een overgenomen variabele verbergen

  1. Zorg ervoor dat de variabele die u wilt verbergen, is gedeclareerd op klasseniveau (buiten elke procedure). Anders hoeft u deze niet te verbergen.

  2. Schrijf in uw afgeleide klasse een Dim-instructie die uw variabele declareren. Gebruik dezelfde naam als die van de overgenomen variabele.

  3. 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 van een overgenomen variabele:

    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 procedure ShowStrings in de afgeleide klasse geeft de schaduwversie van de tekenreeks weer wanneer de naam shadowString niet is gekwalificeerd. Vervolgens wordt de schaduwversie weergegeven wanneer shadowString deze wordt gekwalificeerd met het MyBase 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