如何:访问被派生类隐藏的变量 (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 关键字限定,则显示被隐藏的版本。

可靠编程

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

请参见

任务

如何:隐藏与您的变量同名的变量 (Visual Basic)

如何:隐藏继承的变量 (Visual Basic)

参考

Shadows (Visual Basic)

Overrides (Visual Basic)

概念

对已声明元素的引用 (Visual Basic)

Visual Basic 中的隐藏

隐藏和重写之间的差异 (Visual Basic)

Visual Basic 中的 Me、My、MyBase 和 MyClass

继承的基础知识 (Visual Basic)