HOW TO:存取衍生類別所隱藏的變數
更新:2007 年 11 月
當衍生類別中的程式碼存取變數時,編譯器 (Compiler) 通常會將參考解析為最接近的可存取版本,也就是說,從正在存取的類別 (Class) 反推回去時,所需衍生步驟最少的可存取版本。如果衍生類別中已經定義變數,則程式碼通常就會存取該定義。
如果衍生類別變數會遮蔽基底類別中的變數,則會隱藏基底類別版本。不過,只要使用 MyBase 關鍵字來限定基底類別變數,即可存取這個變數。
存取衍生類別所隱藏的基底類別變數
在運算式或指派陳述式 (Assignment Statement) 中,於變數名稱之前加上 MyBase 關鍵字和句號 (.)。
編譯器會將參考解析為變數的基底類別版本。
下列範例會說明透過繼承 (Inheritance) 來進行主導遮蔽。這個範例會建立兩個參考,一個參考會存取主導遮蔽變數,另一個參考則會略過遮蔽。
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) 所解析出的版本,取決於例如程式碼陳述式位置和限定字串的存在與否等因素。這樣會提高參考到錯誤版本的變數的風險。