Практическое руководство. Доступ к переменной, скрытой производным классом (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 в базовом классе и тенирует ее в производном классе. showStrings Процедура в производном классе отображает версию теневой строки, если имя shadowString не указано. Затем отображается теневая версия, когда shadowString она квалифицирована с MyBase помощью ключевое слово.

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

Чтобы снизить риск обращения к непреднамеренной версии теневой переменной, можно полностью квалифицировать все ссылки на теневую переменную. Тень представляет несколько версий переменной с одинаковым именем. Если оператор кода ссылается на имя переменной, версия, к которой компилятор разрешает ссылку, зависит от таких факторов, как расположение инструкции кода и наличие соответствующей строки. Это может увеличить риск ссылки на неправильную версию переменной.

См. также