如何:隱藏繼承的變數 (Visual Basic)
衍生類別會繼承其基底類別的所有定義。 如果您想要使用與基底類別元素相同的名稱來定義變數,您可以在衍生類別中定義變數時,隱藏或「遮蔽」該基底類別元素。 如果您這樣做,除非衍生類別中的程式碼明確略過遮蔽機制,否則仍會存取您的變數。
您可能想要隱藏繼承變數的另一個原因,就是防止基底類別修訂。 基底類別可能會進行變更,以改變您繼承的元素。 如果發生這種情況,Shadows
修飾元會強制將衍生類別的參考解析為變數,而不是基底類別元素。
隱藏繼承的變數
請確定您要隱藏的變數是在類別層級中宣告 (在任何程序外部)。 否則,您不需要將其隱藏。
在衍生類別內,撰寫 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
未限定時,顯示字串的遮蔽版本。 然後在shadowString
以MyBase
關鍵字限定時,顯示已遮蔽的版本。
穩固程式設計
遮蔽引進超過一個具有相同名稱的變數版本。 當程式碼陳述式參考變數名稱時,編譯器解析參考的版本取決於程式碼陳述式的位置和限定字串是否存在等因素。 這可能會增加參考已遮蔽變數非預期版本的風險。 您可以完整限定已遮蔽變數的所有參考,來降低該風險。