衍生類別會繼承其基類的所有定義。 如果您想要使用與基類元素相同的名稱來定義變數,您可以在衍生類別中定義變數時,隱藏或 遮蔽該基類元素。 如果您這樣做,衍生類別中的程式代碼會存取您的變數,除非它明確略過陰影機制。
您可能想要隱藏繼承變數的另一個原因是要防止基類修訂。 基類可能會發生變更,影響您要繼承的元素。 如果發生這種情況,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關鍵詞限定時,它會顯示陰影版本。
穩固程式設計
陰影會導入多個具有相同名稱的變數版本。 當程式代碼語句參考變數名稱時,編譯程式解析參考的版本取決於程式代碼語句的位置和限定字串是否存在等因素。 這可能會增加參考陰影變數非預期版本的風險。 您可以完全限定陰影變數的所有參考,以降低該風險。