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