如何:访问被派生类隐藏的变量 (Visual Basic)

当派生类中的代码访问一个变量时,编译器通常会将该引用解析为最接近的可访问版本,即从访问类开始使用最少派生步骤的可访问版本。 如果在派生类中定义了该变量,则代码通常会访问该定义。

如果派生类变量隐藏了基类中的变量,则会隐藏基类版本。 但是,可通过使用 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 关键字进行限定时,它会显示隐藏版本。

可靠编程

为了降低引用隐藏变量的意外版本的风险,可以完全限定对隐藏变量的所有引用。 隐藏会引入具有相同名称的变量的多个版本。 当代码语句引用变量名称时,编译器解析引用的版本取决于代码语句的位置以及是否存在限定字符串等因素。 这可能会增加引用错误的变量版本的风险。

另请参阅