Megosztás a következőn keresztül:


Útmutató: Változó elrejtése, amelynek neve megegyezik egy másik változó nevével (Visual Basic)

Elrejthet egy változót árnyékolással , vagyis egy azonos nevű változóval való újradefiniálásával. A elrejteni kívánt változó árnyékolása kétféleképpen lehetséges:

  • Árnyékolás a hatókörön keresztül. A hatókörön belül árnyékolhatja, ha újradefiniálja azt a régió alrégiójában, amely tartalmazza az elrejteni kívánt változót.

  • Árnyékolás az öröklésen keresztül. Ha az elrejteni kívánt változó osztályszinten van definiálva, akkor öröklés útján újradefiniálhatja azt egy származtatott osztályban a Shadows kulcsszó használatával.

A változók elrejtésének két módja

Változó elrejtése a hatókörön keresztüli árnyékolással

  1. Határozza meg az elrejteni kívánt változót meghatározó régiót, és határozza meg azt a kisrégiót, amelyben újradefiniálhatja azt a változóval.

    Változó régiója Újradefiniálható alrégió
    Modul Egy osztály a modulon belül
    Osztály Az osztályon belüli alosztály

    Az osztályon belüli eljárás

    Az eljárásblokkokban nem lehet újradefiniálni egy eljárásváltozót, például egy ...If szerkezetben vagy hurokban.End IfFor

  2. Hozza létre az alrégiót, ha még nem létezik.

  3. Az alrégióban írjon egy dim utasítást , amely deklarálja az árnyékoló változót.

    Ha az alrégión belüli kód a változó nevére hivatkozik, a fordító feloldja az árnyékoló változóra mutató hivatkozást.

    Az alábbi példa a hatókörön keresztüli árnyékolást, valamint az árnyékolást megkerülő hivatkozást szemlélteti.

    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
    

    Az előző példa a változót num modulszinten és eljárásszinten is deklarálja (az eljárásban show). A helyi változó num árnyékot ad a modulszintű változónak numshow, így a helyi változó értéke 2. Azonban az num nem árnyékolható helyi változóként a useModuleLevelNum eljárásban. useModuleLevelNum Ezért a modulszintű változó értékét 1 értékre állítja.

    A MsgBox belső show hívás a modul nevével való minősítéssel halad át az árnyékolási num mechanizmuson. Ezért a modulszintű változót jeleníti meg a helyi változó helyett.

Változó elrejtése az örökléssel való árnyékolással

  1. Győződjön meg arról, hogy az elrejteni kívánt változó egy osztályban és osztályszinten van deklarálva (bármilyen eljáráson kívül). Ellenkező esetben nem tudja árnyékolni az öröklés révén.

  2. Definiáljon egy osztályt, amely a változó osztályából származik, ha még nem létezik.

  3. A származtatott osztályon belül írjon egy utasítást Dim , amely deklarálja a változót. Adja meg az Árnyékok kulcsszót a deklarációban.

    Ha a származtatott osztály kódja a változó nevére hivatkozik, a fordító feloldja a változóra mutató hivatkozást.

    Az alábbi példa az öröklés árnyékolását szemlélteti. Két hivatkozással rendelkezik, az egyik az árnyékolási változóhoz, a másik pedig az árnyékolást megkerülő.

    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
    

    Az előző példa deklarálja a változót shadowString az alaposztályban, és árnyékot ad a származtatott osztálynak. A származtatott osztály eljárása showStrings akkor jeleníti meg a sztring árnyékolt verzióját, ha a név shadowString nincs minősítve. Ezután megjeleníti az árnyékolt verziót, ha shadowString a MyBase kulcsszóval van minősítve.

Robusztus programozás

Az árnyékolás egy azonos nevű változó több verzióját is bevezeti. Ha egy kódutasítás a változó nevére hivatkozik, a kompiler által használt verzió olyan tényezőktől függ, mint a kódutasítás helye és a minősítő sztring jelenléte. Ez növelheti az árnyékolt változók nem tervezett verziójára való hivatkozás kockázatát. Ezt a kockázatot csökkentheti egy árnyékolt változóra mutató összes hivatkozás teljes minősítésével.

Lásd még