Практическое руководство. Сокрытие наследуемой переменной (Visual Basic)

Производный класс наследует все определения базового класса. Если вы хотите определить переменную, используя то же имя, что и элемент базового класса, можно скрыть или потенить этот элемент базового класса при определении переменной в производном классе. Если это сделать, код в производном классе обращается к переменной, если она явно не проходит механизм тени.

Другая причина, по которой может потребоваться скрыть унаследованную переменную, заключается в защите от редакции базового класса. Базовый класс может пройти изменение, которое изменяет наследуемый элемент. В этом случае Shadows модификатор принудительно ссылается на производный класс, который будет разрешен в переменную, а не на элемент базового класса.

Скрытие унаследованной переменной

  1. Убедитесь, что переменная, которую нужно скрыть, объявлена на уровне класса (вне любой процедуры). В противном случае не нужно скрывать его.

  2. В производном классе напишите оператор Dim, объявляющий переменную. Используйте то же имя, что и унаследованная переменная.

  3. Включите ключевое слово тени в объявлении.

    Если код в производном классе ссылается на имя переменной, компилятор разрешает ссылку на переменную.

    В следующем примере показано тени унаследованной переменной:

    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 помощью ключевое слово.

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

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

См. также