Поделиться через


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

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

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

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

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

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

  3. Включите ключевое слово 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.

Надежное программирование

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

См. также