Практическое руководство. Сокрытие наследуемой переменной
Обновлен: Ноябрь 2007
Производный класс наследует все определения его базового класса. Если необходимо определить переменную с тем же именем, что у элемента базового класса, можно скрыть или затенить элемент базового класса при определении переменной в производном классе. Если это сделать, то код в производном классе получает доступ к переменной, если явно не обходится механизм затенения.
Другой причиной, по которой может потребоваться скрыть наследуемую переменную, является защита версии базового класса. Базовый класс может претерпеть изменения, которые отразятся на наследуемом элементе. В этом случае модификатор Shadows принудительно указывает на переменную из производного класса, вместо элемента базового класса.
Скрытие наследуемой переменной
Убедитесь, что переменная, которую требуется скрыть, объявлена на уровне класса (вне любой процедуры). В противном случае ее скрывать необязательно.
Внутри производного класса используйте Оператор Dim (Visual Basic) для объявления переменной. Используйте имя, совпадающее с именем наследуемой переменной.
Вставьте ключевое слово 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 в базовом классе, но она затеняется в производном классе. Процедура showStrings в производном классе отображает версию затенения строки, если не указано полное имя shadowString. Затем отображается затененная версия, когда shadowString квалифицируется ключевым словом MyBase.
Отказоустойчивость
Затенение позволяет давать одно и то же имя нескольким переменным. Если оператор в коде ссылается на имя переменной, то версия переменной, с помощью которой компилятор разрешает ссылку, зависит от таких факторов, как расположение оператора и наличие строки квалификации. Это может повысить риск обращения к непредусмотренной версии затеняемой переменной. Снизить этот риск можно путем полной квалификации всех обращений к затеняемой переменной.
См. также
Задачи
Практическое руководство. Различение двух элементов с одинаковыми именами
Практическое руководство. Сокрытие переменной с тем же именем, что и ваша переменная
Практическое руководство. Доступ к переменной, скрытой производным классом
Основные понятия
Разрешение ссылки, когда несколько переменных имеют одинаковые имена
Различия между сокрытием и переопределением