Como: Acessar uma variável oculta por uma classe derivada (Visual Basic)
Quando o código em uma classe derivada acessa uma variável, o compilador normalmente resolve a referência para a versão acessível mais próxima, ou seja, a versão acessível o menor número de etapas derivacionais para trás da classe de acesso. Se a variável é definida na classe derivada, o código normalmente acessa essa definição.
Se a variável de classe derivada sombrear uma variável na classe base, ela ocultará a versão da classe base. No entanto, você pode acessar a variável de classe base qualificando-a com a MyBase
palavra-chave.
Para acessar uma variável de classe base ocultada por uma classe derivada
Em uma instrução de expressão ou atribuição, preceda o nome da variável com a
MyBase
palavra-chave e um ponto (.
).O compilador resolve a referência à versão de classe base da variável.
O exemplo a seguir ilustra o sombreamento através da herança. Ele faz duas referências, uma que acessa a variável de sombreamento e outra que ignora o sombreamento.
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
O exemplo anterior declara a variável
shadowString
na classe base e a sombreia na classe derivada. O procedimentoshowStrings
na classe derivada exibe a versão de sombreamento da cadeia de caracteres quando o nomeshadowString
não é qualificado. Em seguida, exibe a versão sombreada quandoshadowString
é qualificada com aMyBase
palavra-chave.
Programação robusta
Para reduzir o risco de referência a uma versão não intencional de uma variável sombreada, você pode qualificar totalmente todas as referências a uma variável sombreada. O sombreamento introduz mais de uma versão de uma variável com o mesmo nome. Quando uma instrução de código se refere ao nome da variável, a versão para a qual o compilador resolve a referência depende de fatores como o local da instrução de código e a presença de uma cadeia de caracteres de qualificação. Isso pode aumentar o risco de se referir à versão errada da variável.