如何:隐藏继承的变量

更新:2007 年 11 月

派生类继承其基类的所有定义。如果要定义与某一基类元素同名的变量,则可以在定义派生类变量时“隐藏”该基类元素。如果这样做,则除非派生类的代码显式跳过隐藏机制,否则它就会访问您定义的变量。

隐藏被继承变量的另一个原因是为了防止基类修订。基类的更改可能会改变要继承的元素。如果发生这种情况,则 Shadows 修饰符会将来自派生类的引用强制解析为您定义的变量,而不是基类元素。

隐藏被继承变量

  1. 确保要隐藏的变量是在类级别(任何过程之外)声明的。否则不需要将其隐藏。

  2. 在派生类中,编写 Dim 语句 (Visual Basic) 声明您的变量。使用与被继承变量相同的名称。

  3. 在声明中包含 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 关键字限定,则显示被隐藏的版本。

可靠编程

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

请参见

任务

如何:区分两个名称相同的元素

如何:隐藏与您的变量同名的变量

如何:访问被派生类隐藏的变量

概念

有多个同名变量时解析引用

Visual Basic 中的隐藏

隐藏和重写之间的差异

参考

Overrides

其他资源

对已声明元素的引用