Dela via


Anvisningar: Dölj en variabel med samma namn som din variabel (Visual Basic)

Du kan dölja en variabel genom att skugga den, dvs. genom att omdefiniera den med en variabel med samma namn. Du kan skugga variabeln som du vill dölja på två sätt:

  • Skuggning genom omfång. Du kan skugga den genom omfånget genom att redeclarera den i en underregion i regionen som innehåller variabeln som du vill dölja.

  • Skuggning genom arv. Om variabeln som du vill dölja definieras på klassnivå kan du skugga den genom arv genom att redeclara den med nyckelordet Skuggor i en härledd klass.

Två sätt att dölja en variabel

Så här döljer du en variabel genom att skugga den genom omfång

  1. Fastställ den region som definierar den variabel som du vill dölja och fastställa en underregion där du vill omdefiniera den med din variabel.

    Variabelns region Tillåten underregion för omdefiniering
    Modul En klass i modulen
    Klass En underklass i klassen

    En procedur inom klassen

    Du kan inte omdefiniera en procedurvariabel i ett block inom den proceduren, till exempel i en If...End If konstruktion eller en For loop.

  2. Skapa underregionen om den inte redan finns.

  3. I underregionen skriver du en dim-instruktion som deklarerar skuggningsvariabeln.

    När kod i underregionen refererar till variabelnamnet löser kompilatorn referensen till skuggvariabeln.

    I följande exempel visas skuggning genom omfång samt en referens som kringgår skuggningen.

    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
    

    I föregående exempel deklareras variabeln num både på modulnivå och på procedurnivå (i proceduren show). Den lokala variabeln num skuggar variabeln num på modulnivå i show, så den lokala variabeln är inställd på 2. Det finns dock ingen lokal variabel att skugga num i proceduren useModuleLevelNum . useModuleLevelNum Därför anger värdet för modulnivåvariabeln till 1.

    Anropet MsgBox inuti show kringgår skuggningsmekanismen genom att kvalificera num med modulnamnet. Därför visas variabeln på modulnivå i stället för den lokala variabeln.

Så här döljer du en variabel genom att skugga den genom arv

  1. Kontrollera att variabeln som du vill dölja deklareras i en klass och på klassnivå (utanför valfri procedur). Annars kan du inte skugga det genom arv.

  2. Definiera en klass som härleds från variabelns klass om den inte redan finns.

  3. I den härledda klassen skriver du en Dim instruktion som deklarerar din variabel. Inkludera nyckelordet Skuggor i deklarationen.

    När kod i den härledda klassen refererar till variabelnamnet löser kompilatorn referensen till variabeln.

    I följande exempel visas skuggning genom arv. Den gör två referenser, en som kommer åt skuggvariabeln och en som kringgår skuggningen.

    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
    

    Föregående exempel deklarerar variabeln shadowString i basklassen och skuggar den i den härledda klassen. Proceduren showStrings i den härledda klassen visar skuggningsversionen av strängen när namnet shadowString inte är kvalificerat. Den visar sedan den skuggade versionen när shadowString den är kvalificerad med nyckelordet MyBase .

Robust programmering

Skuggning introducerar mer än en version av en variabel med samma namn. När en kodsats refererar till variabelnamnet beror den version som kompilatorn löser referensen till på faktorer som platsen för kodsatsen och förekomsten av en kvalificerande sträng. Detta kan öka risken för att referera till en oavsiktlig version av en skuggad variabel. Du kan minska den risken genom att helt kvalificera alla referenser till en skuggad variabel.

Se även