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 à versão acessível mais próxima. Ou seja, a versão acessível com menos etapas derivacionais para trás da classe de acesso. Se a variável for definida na classe derivada, o código normalmente acessará 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 palavra-chave MyBase
.
Como acessar uma variável de classe base oculta por uma classe derivada
Em uma expressão ou instrução de atribuição, preceda o nome da variável com a palavra-chave
MyBase
e um período (.
).O compilador resolve a referência à versão de classe base da variável.
O exemplo a seguir ilustra o sombreamento por meio 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, ele exibe a versão sombreada quandoshadowString
é qualificada com a palavra-chaveMyBase
.
Programação robusta
Para reduzir o risco de fazer 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 apresenta 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 à qual o compilador resolve a referência depende de fatores como o local da instrução do código e a presença de uma cadeia de caracteres qualificada. Isso pode aumentar o risco de fazer referência à versão errada da variável.