Compartilhar via


Solucionando problemas de variáveis no Visual Basic

Esta página lista alguns problemas comuns que podem ocorrer ao trabalhar com variáveis em Visual Basic.

Incapaz de Acessar Membros de um Objeto

Se o código tenta acessar uma propriedade ou método em um objeto, há dois resultados possíveis de erro:

  • O compilador pode gerar um mensagem de erro se você declarar a variável de objeto para ser de um tipo específico e, em seguida, se referir a um membro não definido por aquele tipo.

  • Um tempo de execução MemberAccessException ocorre quando o objeto atribuído a um variável de objeto não expõe o membro que seu código está tentando acessar. No caso de uma variável do Tipo de dados Object, você também pode obter essa exceção se o membro não for Public. Isso ocorre porque a vinculação atrasada permite acesso somente a membros Public.

Quando Instrução Option Strict é colocada On, uma variável objeto pode acessar somente os métodos e propriedades da classe com a qual foi declarada. O exemplo a seguir ilustra isto:

Dim p As Object = New System.Windows.Forms.Label
Dim q As System.Windows.Forms.Label = New System.Windows.Forms.Label
Dim j, k As Integer 
' The following statement generates a compiler error.
j = p.Left
' The following statement retrieves the left edge of the label  
' in pixels.
k = q.Left

Nesse examplo, p pode usar somente os membros da classe Object, que não inclui a propriedade Left. Por outro lado, q foi declarada com o tipo Label, logo ela pode usar todos os métodos e propriedade da classe Label no System.Windows.Forms namespace.

Abordagem Correta

Para poder acessar todos os membros de um objeto de uma determinada classe, declare a variável de objeto para ser do tipo da classe quando possível. Se você não puder fazer isso, por exemplo se você não souber o tipo de objeto em tempo de compilação, você deve definir Option Strict para Off e declarar a variável para ser o Tipo de dados Object. Isso permite que objetos de qualquer tipo possam ser atribuídos à variável, e você deve tomar medidas para garantir que o objeto atualmente atribuído seja de um tipo aceitável. Você pode usar o Operador TypeOf (Visual Basic) para tomar essa decisão.

Outros Componentes Não Podem Acessar Sua Variável

Os nomes de Visual Basic não diferenciam maiúsculas de minúsculas. Se dois nomes diferem somente no caso alfabético, o compilador os interpreta com o mesmo nome. Por exemplo, ele considera que ABC e abc referem-se ao mesmo elemento declarado.

No entanto, a Linguagem Comum em Tempo de Execução (CLR, common language runtime) usa vinculação que diferencia maiúsculas e minúsculas . Portanto, quando você produzir um conjunto de módulos (assembly) ou uma DLL e disponibilizá-lo a outros conjuntos de módulos (assemblies), seus nomes não são mais indiferentes a maiúsculas e minúsculas. Por exemplo, se você definir uma classe com um elemento chamado ABC, e fizer com que outros conjuntos usem sua classe por meio da Linguagem Comum em Tempo de Execução, eles devem se referir ao elemento como ABC. Se você posteriormente recompilar sua classe e alterar nome do elemento para abc, os outros conjuntos de módulos (assemblies) usando sua classe não poderão mais acessar esse elemento. Portanto, quando você lançar uma versão atualizada de um conjunto de módulos (assembly), você não deve alterar maiúsculas e minúsculas em quaisquer elementos públicos.

Para obter mais informações, consulte CLR (Common Language Runtime).

Abordagem Correta

Para permitir que outros componentes acessem as variáveis, trate seus nomes como se diferenciassem maiúsculas de minúsculas. Quando você está testando a classe ou módulo, certifique-se que outros conjuntos estão vinculados às variáveis esperadas. Once you have published a component, do not make any modifications to existing variable names, including changing their cases.

Variável Errada Sendo Usada

Quando você tiver mais de uma variável com o mesmo nome, o compilador Visual Basic tenta resolver cada referência a esse nome. Se as variáveis têm escopo diferente, o compilador resolve uma referência para a declaração com o menor escopo. Se eles tiverem o mesmo escopo, a resolução falhará e o compilador sinalizará um erro. Para obter mais informações, consulte Referências a elementos declarados (Visual Basic).

Abordagem Correta

Evite usar variáveis com o mesmo nome mas escopo diferente. Se você estiver usando outros conjuntos de módulos (assemblies) ou projetos, evite usar qualquer nomes definidos nesses componentes externos tanto quanto possível. Se você tiver mais de uma variável com o mesmo nome, não deixe de qualificar cada referência a ela. Para obter mais informações, consulte Referências a elementos declarados (Visual Basic).

Consulte também

Tarefas

Como acessar membros de um objeto (Visual Basic)

Como determinar a que tipo uma variável de objeto se refere (Visual Basic)

Conceitos

Variáveis no Visual Basic

Declaração de variável no Visual Basic

Variáveis de objeto no Visual Basic

Declaração de variável do objeto (Visual Basic)

Valores de variável de objeto (Visual Basic)

Referências a elementos declarados (Visual Basic)

Nomes de elemento declarados (Visual Basic)