Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode ocultar uma variável ao sombreá-la, ou seja, redefinindo-a com uma variável de mesmo nome. Você pode sombrear a variável que deseja ocultar de duas maneiras:
Sombreamento por escopo. Você pode sombreá-lo por meio do escopo redeclarando-o dentro de uma sub-região que contém a variável que você deseja ocultar.
Sombreamento por herança. Se a variável que você deseja ocultar for definida no nível de classe, você poderá sombreá-la por meio da herança redeclarando-a com a palavra-chave Sombras em uma classe derivada.
Duas maneiras de ocultar uma variável
Para ocultar uma variável seguindo-a por meio do escopo
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 permitido para redefini-la Módulo Uma classe dentro do módulo Classe Uma subclasse dentro da classe
Um procedimento dentro da classeVocê não pode redefinir uma variável de procedimento em um bloco dentro desse procedimento, por exemplo, em uma
If...End Ifconstrução ou umForloop.Crie a sub-região se ela ainda não existir.
Na 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 por meio 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 ModuleO exemplo anterior declara a variável
numno nível do módulo e no nível do procedimento (no procedimentoshow). A variávelnumlocal sombreia a variávelnumno nível do módulo,showportanto, a variável local é definida como 2. No entanto, não há nenhuma variável local para sombranumnouseModuleLevelNumprocedimento. Portanto,useModuleLevelNumdefine o valor da variável no nível do módulo como 1.A
MsgBoxchamada internashowignora o mecanismo de sombreamento qualificando-senumcom o nome do módulo. Portanto, ela exibe a variável no nível do módulo em vez da variável local.
Para ocultar uma variável seguindo-a por meio da herança
Verifique se a variável que você deseja ocultar é declarada em uma classe e no nível da classe (fora de qualquer procedimento). Caso contrário, você não poderá sombreá-lo por meio da herança.
Defina uma classe derivada da classe da variável se ainda não existir.
Dentro da classe derivada, escreva uma
Diminstrução declarando sua variável. Inclua a palavra-chave Sombras na declaração.Quando o código na classe derivada se refere ao nome da variável, o compilador resolve a referência à 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 ClassO exemplo anterior declara a variável
shadowStringna classe base e a sombreia na classe derivada. O procedimentoshowStringsna classe derivada exibe a versão de sombreamento da cadeia de caracteres quando o nomeshadowStringnão é qualificado. Em seguida, ele exibe a versão sombreada quandoshadowStringé qualificada com aMyBasepalavra-chave.
Programação robusta
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 de código e a presença de uma cadeia de caracteres qualificada. 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.