Практическое руководство. Доступ к переменной, скрытой производным классом (Visual Basic)How to: Access a Variable Hidden by a Derived Class (Visual Basic)

Когда код в производном классе получает доступ к переменной, компилятор обычно разрешает ссылку на ближайшую доступную версию, то есть доступную версию с минимальными производными шагами назад от класса доступа.When code in a derived class accesses a variable, the compiler normally resolves the reference to the closest accessible version, that is, the accessible version the fewest derivational steps backward from the accessing class. Если переменная определена в производном классе, код обычно получает доступ к определению.If the variable is defined in the derived class, the code normally accesses that definition.

Если переменная производного класса затеняет переменную в базовом классе, она скрывает версию базового класса.If the derived class variable shadows a variable in the base class, it hides the base class version. Однако можно получить доступ к переменной базового класса, указав ее с помощью MyBase ключевого слова.However, you can access the base class variable by qualifying it with the MyBase keyword.

Доступ к переменной базового класса, скрытой производным классомTo access a base class variable hidden by a derived class

  • В выражении или операторе присваивания перед именем переменной следует MyBase указать ключевое слово и точку ( . ).In an expression or assignment statement, precede the variable name with the MyBase keyword and a period (.).

    Компилятор разрешает ссылку на версию базового класса переменной.The compiler resolves the reference to the base class version of the variable.

    В следующем примере показано затенение с помощью наследования.The following example illustrates shadowing through inheritance. Он делает две ссылки — одну, которая обращается к переменной с тенью, и одну, которая обходит затенение.It makes two references, one that accesses the shadowing variable and one that bypasses the shadowing.

    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 в базовом классе и переобъявляется в производном классе.The preceding example declares the variable shadowString in the base class and shadows it in the derived class. Процедура showStrings в производном классе отображает версию строки с тенью, если ее имя shadowString не является полным.The procedure showStrings in the derived class displays the shadowing version of the string when the name shadowString is not qualified. После этого она отображает затененную версию, если shadowString дополнена MyBase ключевым словом.It then displays the shadowed version when shadowString is qualified with the MyBase keyword.

ОтказоустойчивостьRobust Programming

Чтобы снизить риск обращения к непреднамеренной версии затененной переменной, можно полностью определить все ссылки на затененную переменную.To lower the risk of referring to an unintended version of a shadowed variable, you can fully qualify all references to a shadowed variable. При затенении введено более одной версии переменной с тем же именем.Shadowing introduces more than one version of a variable with the same name. Если инструкция Code ссылается на имя переменной, версия, на которую компилятор разрешает ссылку, зависит от таких факторов, как расположение инструкции Code и наличие подходящих строк.When a code statement refers to the variable name, the version to which the compiler resolves the reference depends on factors such as the location of the code statement and the presence of a qualifying string. Это может увеличить риск обращения к неверной версии переменной.This can increase the risk of referring to the wrong version of the variable.

См. также разделSee also