HOW TO:隱藏繼承的變數 (Visual Basic)
衍生類別 (Derived Class) 會繼承其基底類別的所有定義。如果您想要使用和基底類別中的某個項目相同的名稱來定義變數,則可以在衍生類別中定義變數時,隱藏或「遮蔽」(Shadow) 該基底類別項目。如果這樣做,則除非衍生類別中的程式碼明確略過主導遮蔽機制,否則程式碼就會存取您的變數。
另一個可能會讓您想要隱藏繼承的變數的原因是,這樣可以保護基底類別免於遭到修訂。基底類別可能會遭到變更,而繼承的項目也隨之改變。如果發生這種情況,則 Shadows 修飾詞 (Modifier) 會強制將衍生類別的參考解析為您的變數,而不是基底類別項目。
隱藏繼承的變數
確定您想要隱藏的變數是在類別 (Class) 層級 (不在任何程序內) 宣告。否則您就不需要隱藏它。
在您的衍生類別內,撰寫 Dim 陳述式 (Visual Basic) 來宣告變數。使用和繼承的變數相同的名稱。
在宣告中加入 Shadows (Visual Basic) 關鍵字。
當衍生類別中的程式碼參考變數名稱時,編譯器就會解析對變數的參考。
下列範例說明遮蔽繼承變數的方法。
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,並且在衍生類別中遮蔽這個變數。當名稱 shadowString 不限制時,在衍生類別中的 showStrings 程序會顯示字串的主導遮蔽版本。接著當 shadowString 以 MyBase 關鍵字加以限制時,會顯示遮蔽的版本。
穩固程式設計
遮蔽會使用相同名稱引入多個變數版本。當程式碼陳述式參考變數名稱時,編譯器 (Compiler) 所解析出的版本,取決於例如程式碼陳述式位置和限定字串的存在與否等因素。這有可能會增加參考到遮蔽變數不必要版本的風險。您可全面限定遮蔽變數的所有參考,以降低風險。
請參閱
工作
HOW TO:隱藏與您的變數名稱相同的變數 (Visual Basic)
HOW TO:存取衍生類別所隱藏的變數 (Visual Basic)