Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Когда код в производном классе обращается к переменной, компилятор обычно разрешает ссылку на ближайшую доступную версию, то есть доступную версию с наименьшим количеством шагов наследования от класса, который выполняет доступ. Если переменная определена в производном классе, код обычно обращается к определению.
Если переменная производного класса перекрывает переменную в базовом классе, она скрывает версию базового класса. Однако вы можете получить доступ к переменной базового класса, квалифицируя ее с помощью ключевого 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
.
Надежное программирование
Чтобы снизить риск обращения к непреднамеренной версии теневой переменной, можно полностью квалифицировать все ссылки на теневую переменную. Тень представляет несколько версий переменной с одинаковым именем. Если инструкция кода ссылается на имя переменной, версия, к которой компилятор разрешает эту ссылку, зависит от таких факторов, как расположение инструкции кода и наличие уточняющей строки. Это может увеличить риск ссылки на неправильную версию переменной.