如何:访问被派生类隐藏的变量
更新:2007 年 11 月
如果派生类的代码访问变量,编译器通常将引用解析到最近的可访问版本,即从访问类向上,派生步骤最少的可访问版本。如果变量是在该派生类中定义的,则代码通常访问该定义。
如果该派生类变量隐藏了基类的某个变量,则它隐藏了基类版本。但是,通过使用 MyBase 关键字限定基类变量,可以访问该基类变量。
访问被派生类隐藏的基类变量
在表达式或赋值语句中,在变量名称前面加 MyBase 关键字和一个句点 (.)。
编译器将引用解析到该变量的基类版本。
下面的示例演示通过继承进行隐藏。该示例进行了两个引用,一个访问隐藏变量,另一个则跳过隐藏变量。
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 关键字限定,则显示被隐藏的版本。
可靠编程
要降低引用被隐藏变量的意外版本的风险,可以完全限定对被隐藏变量的所有引用。隐藏使用同一名称引入了变量的多个版本。如果代码语句引用该变量名,则编译器将引用解析到的版本取决于代码语句的位置以及是否存在限定字符串等因素。这会增加引用错误变量版本的风险。