共用方式為


如何:隱藏與變數同名的變數 (Visual Basic)

您可以藉由 遮蔽 變數來隱藏變數,也就是以相同名稱的變數重新定義變數。 您可以透過兩種方式遮蔽您要隱藏的變數:

  • 透過範圍掩蔽。 您可以透過在包含您想隱藏的變數的區域的子區域內重新宣告範圍,以此來遮蔽該變數。

  • 透過繼承陰影。 如果您想要隱藏的變數是在類別層級定義,您可以在衍生類別中以 Shadows 關鍵詞重新宣告它,藉此透過繼承來遮蔽它。

隱藏變數的兩種方式

透過範圍遮蔽變數

  1. 確定定義您要隱藏的變數的區域,然後在該區域內確定一個子區域,用於重新定義您的變數。

    變數的區域 可允許重新定義的子區域
    模組 模組內的類別
    班級 類別內的子類別

    類別內的程序

    您無法在該程序內的區塊中重新定義程序變數,例如在If...End If結構或For迴圈中。

  2. 如果子區域不存在,請建立子區域。

  3. 在子區域內,撰寫 Dim 語句 ,宣告陰影變數。

    當子區域內的程式代碼參考變數名稱時,編譯程式會解析遮蔽變數的參考。

    下列範例說明透過範圍遮蔽,以及略過陰影的參考。

    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
    

    上述範例會在模組層級和程式層級宣告 變數 num (在 程式中 show)。 局部變數num會遮蔽 內的num模組層級變數show,因此局部變數會設定為 2。 不過,在num程序中沒有會遮蔽useModuleLevelNum的局部變數。 因此, useModuleLevelNum 將模組層級變數的值設定為 1。

    內的MsgBoxshow呼叫會藉由限定num模組名稱來略過陰影機制。 因此,它會顯示模組層級變數,而不是局部變數。

透過繼承遮蔽變數

  1. 請確定您想要隱藏的變數是在類別中宣告,並在類別層級(在任何程式之外)。 否則您無法透過繼承來遮蔽它。

  2. 如果尚未存在,請定義衍生自變數類別的類別。

  3. 在衍生類別內,撰寫 Dim 宣告變數的語句。 在宣告中包含 Shadows 關鍵詞。

    當衍生類別中的程式代碼參考變數名稱時,編譯程式會解決對你的變數的參考。

    下列範例說明透過繼承遮蔽。 它會建立兩個參考,一個用於存取遮蔽變數,另一個則繞過遮蔽機制。

    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
    

    上述範例會宣告基類中的變數 shadowString ,並將它遮蔽在衍生類別中。 衍生類別中的程式 showStrings 會在名稱 shadowString 不合格時顯示字串的陰影版本。 然後,當 shadowStringMyBase 關鍵詞限定時,它會顯示陰影版本。

健全的程式設計

陰影會導入多個具有相同名稱的變數版本。 當程式代碼語句參考變數名稱時,編譯程式解析參考的版本取決於程式代碼語句的位置和限定字串是否存在等因素。 這可能會增加參考陰影變數非預期版本的風險。 您可以完全限定陰影變數的所有參考,以降低該風險。

另請參閱