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

派生类继承其基类的所有定义。 如果要使用与基类的元素相同的名称来定义变量,可以在派生类中定义变量时隐藏(或遮蔽)该基类元素。 如果这样做,派生类中的代码将访问变量,除非它显式绕过隐藏机制。

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

隐藏继承的变量

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

  2. 在派生类中,编写一个 Dim 语句以声明变量。 使用与继承的变量相同的名称。

  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 关键字进行限定时,它会显示隐藏版本。

可靠编程

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

请参阅