Como acessar uma variável oculta por uma classe derivada (Visual Basic)How to: Access a Variable Hidden by a Derived Class (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 o menor número de etapas de derivação para trás da classe de acesso.When code in a derived class accesses a variable, the compiler normally resolves the reference to the closest accessible version, that is, the accessible version the fewest derivational steps backward from the accessing class. Se a variável for definida na classe derivada, o código normalmente acessará essa definição.If the variable is defined in the derived class, the code normally accesses that definition.

Se a variável de classe derivada sombreia uma variável na classe base, ela ocultará a versão da classe base.If the derived class variable shadows a variable in the base class, it hides the base class version. No entanto, você pode acessar a variável de classe base qualificando-a com a MyBase palavra-chave.However, you can access the base class variable by qualifying it with the MyBase keyword.

Para acessar uma variável de classe base ocultada por uma classe derivadaTo access a base class variable hidden by a derived class

  • Em uma expressão ou instrução de atribuição, preceda o nome da variável com a MyBase palavra-chave e um ponto ( . ).In an expression or assignment statement, precede the variable name with the MyBase keyword and a period (.).

    O compilador resolve a referência à versão da classe base da variável.The compiler resolves the reference to the base class version of the variable.

    O exemplo a seguir ilustra o sombreamento por meio de herança.The following example illustrates shadowing through inheritance. Ele faz duas referências, uma que acessa a variável de sombreamento e outra que ignora o sombreamento.It makes two references, one that accesses the shadowing variable and one that bypasses the shadowing.

    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.The preceding example declares the variable shadowString in the base class and shadows it in the derived class. O procedimento showStrings na classe derivada exibe a versão de sombreamento da cadeia de caracteres quando o nome shadowString não é qualificado.The procedure showStrings in the derived class displays the shadowing version of the string when the name shadowString is not qualified. Em seguida, ele exibe a versão sombreada quando shadowString é qualificado com a MyBase palavra-chave.It then displays the shadowed version when shadowString is qualified with the MyBase keyword.

Programação robustaRobust Programming

Para reduzir o risco de se referir 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.To lower the risk of referring to an unintended version of a shadowed variable, you can fully qualify all references to a shadowed variable. O sombreamento apresenta mais de uma versão de uma variável com o mesmo nome.Shadowing introduces more than one version of a variable with the same name. 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 do código e a presença de uma cadeia de caracteres de qualificação.When a code statement refers to the variable name, the version to which the compiler resolves the reference depends on factors such as the location of the code statement and the presence of a qualifying string. Isso pode aumentar o risco de se referir à versão errada da variável.This can increase the risk of referring to the wrong version of the variable.

Consulte tambémSee also