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