Partilhar via


Como: Ocultar uma variável com o mesmo nome que sua variável (Visual Basic)

Você pode ocultar uma variável sombreando-a, ou seja, redefinindo-a com uma variável de mesmo nome. Você pode sombrear a variável que deseja ocultar de duas maneiras:

  • Sombreamento através do escopo. Você pode sombreá-lo através do escopo redeclarando-o dentro de uma sub-região da região que contém a variável que você deseja ocultar.

  • Sombreamento através da herança. Se a variável que você deseja ocultar estiver definida no nível da classe, você poderá sombreá-la através da herança redeclará-la com a palavra-chave Shadows em uma classe derivada.

Duas maneiras de ocultar uma variável

Para ocultar uma variável sombreando-a através do escopo

  1. Determine a região que define a variável que você deseja ocultar e determine uma sub-região na qual redefini-la com sua variável.

    Região da variável Sub-região permitida para redefini-la
    Módulo Uma classe dentro do módulo
    Classe Uma subclasse dentro da classe

    Um procedimento dentro da classe

    Não é possível redefinir uma variável de procedimento em um bloco dentro desse procedimento, por exemplo, em uma Ifconstrução ...End If ou um For loop.

  2. Crie a sub-região se ela ainda não existir.

  3. Dentro da sub-região, escreva uma instrução Dim declarando a variável de sombreamento.

    Quando o código dentro da sub-região se refere ao nome da variável, o compilador resolve a referência à variável de sombreamento.

    O exemplo a seguir ilustra o sombreamento através do escopo, bem como uma referência que ignora o sombreamento.

    Module shadowByScope
        ' The following statement declares num as a module-level variable.
        Public num As Integer
        Sub show()
            ' The following statement declares num as a local variable.
            Dim num As Integer
            ' The following statement sets the value of the local variable.
            num = 2
            ' The following statement displays the module-level variable.
            MsgBox(CStr(shadowByScope.num))
        End Sub
        Sub useModuleLevelNum()
            ' The following statement sets the value of the module-level variable.
            num = 1
            show()
        End Sub
    End Module
    

    O exemplo anterior declara a variável num tanto no nível do módulo quanto no nível do procedimento (no procedimento show). A variável num local sombreia a variável num de nível de módulo dentro showde , de modo que a variável local é definida como 2. No entanto, não há nenhuma variável local para sombra num no useModuleLevelNum procedimento. Portanto, useModuleLevelNum define o valor da variável de nível de módulo como 1.

    A MsgBox chamada interna show ignora o mecanismo de sombreamento qualificando-se num com o nome do módulo. Portanto, ele exibe a variável de nível de módulo em vez da variável local.

Para ocultar uma variável sombreando-a através da herança

  1. Certifique-se de que a variável que você deseja ocultar seja declarada em uma classe e no nível da classe (fora de qualquer procedimento). Caso contrário, você não pode fazer sombra através da herança.

  2. Defina uma classe derivada da classe da variável, caso ainda não exista.

  3. Dentro da classe derivada, escreva uma Dim instrução declarando sua variável. Inclua a palavra-chave Shadows na declaração.

    Quando o código na classe derivada se refere ao nome da variável, o compilador resolve a referência à sua 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 procedimento showStrings na classe derivada exibe a versão de sombreamento da cadeia de caracteres quando o nome shadowString não é qualificado. Em seguida, exibe a versão sombreada quando shadowString é qualificada com a MyBase palavra-chave.

Programação robusta

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 a uma versão não intencional de uma variável sombreada. Você pode reduzir esse risco qualificando totalmente todas as referências a uma variável sombreada.

Consulte também