Como controlar o escopo de uma variável (Visual Basic)

Normalmente, uma variável está no escopo ou visível para referência em toda a região em que você a declara. Em alguns casos, o nível de acesso da variável pode influenciar o escopo dela.

Para saber mais, consulte Escopo no Visual Basic.

Escopo no Nível de Bloco ou Procedimento

Para tornar uma variável visível somente dentro de um bloco

  • Coloque a Instrução Dim para a variável entre as instruções de declaração de início e término desse bloco, por exemplo, entre as instruções For e Next de um loop For.

    Você pode consultar a variável somente de dentro do bloco.

Para tornar uma variável visível somente dentro de um procedimento

  • Coloque a instrução Dim para a variável dentro do procedimento, mas fora de qualquer bloco (como um bloco With...End With).

    Você pode consultar a variável somente de dentro do procedimento, incluindo dentro de qualquer bloco contido no procedimento.

Escopo no Nível do Módulo ou do Namespace

Para conveniência, o nível de módulo de termo único se aplica igualmente a módulos, classes e estruturas. O nível de acesso de uma variável de nível de módulo determina o escopo dela. O namespace que contém o módulo, a classe ou a estrutura também influencia o escopo.

Para tornar uma variável visível em um módulo, classe ou estrutura

  1. Coloque a instrução Dim para a variável dentro do módulo, classe ou estrutura, mas fora de qualquer procedimento.

  2. Inclua a palavra-chave Privado na instrução Dim.

  3. Você pode consultar a variável de qualquer lugar dentro do módulo, classe ou estrutura, mas não de fora dele.

Para tornar uma variável visível em um namespace

  1. Coloque a instrução Dim para a variável dentro do módulo, classe ou estrutura, mas fora de qualquer procedimento.

  2. Inclua a palavra-chave Amigo ou Público na instrução Dim.

  3. Você pode consultar a variável de qualquer lugar dentro do namespace contendo o módulo, a classe ou a estrutura.

Exemplo

O exemplo a seguir declara uma variável no nível do módulo e limita a visibilidade dela ao código dentro do módulo.

Module demonstrateScope  
    Private strMsg As String  
    Sub initializePrivateVariable()  
        strMsg = "This variable cannot be used outside this module."  
    End Sub  
    Sub usePrivateVariable()  
        MsgBox(strMsg)  
    End Sub  
End Module  

No exemplo anterior, todos os procedimentos definidos no módulo demonstrateScope podem se referir à variável StringstrMsg. Quando o procedimento usePrivateVariable é chamado, ele exibe o conteúdo da variável de cadeia de caracteres strMsg em uma caixa de diálogo.

Com a alteração a seguir para o exemplo anterior, a variável de cadeia de caracteres strMsg pode ser referenciada por código em qualquer lugar no namespace da declaração dela.

Public strMsg As String  

Programação robusta

Quanto mais estreito for o escopo de uma variável, menos oportunidades você terá para se referir acidentalmente a ela no lugar de outra variável com o mesmo nome. Você também pode minimizar problemas de correspondência de referência.

Segurança do .NET Framework

Quanto mais restrito for o escopo de uma variável, menores são as chances de que o código mal-intencionado possa fazer uso inadequado dela.

Confira também