Solucionando problemas de variáveis no Visual Basic
Esta página lista alguns problemas comuns que podem ocorrer ao trabalhar com variáveis no Visual Basic.
Não é Possível Acessar Membros de um Objeto
Se o código tentar acessar uma propriedade ou método em um objeto, haverá dois resultados de erro possíveis:
O compilador poderá gerar uma mensagem de erro se você declarar que a variável de objeto é de um tipo específico e, em seguida, se referir a um membro não definido por esse tipo.
Um tempo de execução MemberAccessException ocorre quando o objeto atribuído a uma 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 de Objeto, você também poderá obter essa exceção se o membro não for
Public
. Isso ocorre porque a associação tardia permite o acesso somente aos membrosPublic
.
Quando a Instrução Option Strict define a verificação de tipo On
, uma variável de objeto pode acessar apenas os métodos e propriedades da classe com a qual você a declara. O exemplo a seguir ilustra essa situação.
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
Neste exemplo, p
pode usar apenas os membros da própria classe Object, que não incluem a propriedade Left
. Por outro lado, q
foi declarado como do tipo Label, portanto, ele pode usar todos os métodos e propriedades da classe Label no namespace System.Windows.Forms.
Abordagem Correta
Para poder acessar todos os membros de um objeto de uma determinada classe, declare a variável de objeto como sendo do tipo dessa classe quando possível. Se você não puder fazer isso, por exemplo, se não souber o tipo de objeto no tempo de compilação, deverá definir Option Strict
para Off
e declarar a variável como sendo do Tipo de Dados do Objeto. Isso permite que objetos de qualquer tipo sejam atribuídos à variável e você deve tomar medidas para garantir que o objeto atribuído atualmente seja de um tipo aceitável. Você pode usar o Operador TypeOf para fazer essa determinação.
Outros Componentes não Podem Acessar sua Variável
Os nomes do Visual Basic não diferenciam maiúsculas de minúsculas. Se dois nomes diferem apenas em maiúsculas e minúsculas alfabéticas, o compilador os interpreta como o mesmo nome. Por exemplo, ele considera que ABC
e abc
se referem ao mesmo elemento declarado.
No entanto, o CLR (Common Language Runtime) usa associação que diferencia maiúsculas de minúsculas. Portanto, quando você produz um assembly ou uma DLL e o disponibiliza para outros assemblies, seus nomes não diferenciam maiúsculas de minúsculas. Por exemplo, se você definir uma classe com um elemento chamado ABC
e outros assemblies usarem sua classe por meio do Common Language Runtime, eles deverão se referir ao elemento como ABC
. Se, posteriormente, você recompilar sua classe e alterar o nome do elemento para abc
, os outros assemblies que usam sua classe não poderão mais acessar esse elemento. Portanto, quando você lança uma versão atualizada de um assembly, não deve alterar o as maiúsculas e minúsculas alfabéticas de nenhum elemento público.
Para obter mais informações, consulte Common Language Runtime.
Abordagem Correta
Para permitir que outros componentes acessem suas variáveis, trate seus nomes como se fossem sensíveis a maiúsculas e minúsculas. Ao testar sua classe ou módulo, verifique se outros assemblies estão se associando às variáveis que você espera. Depois de publicar um componente, não faça nenhuma modificação em nomes de variáveis existentes, incluindo a alteração das maiúsculas e minúsculas deles.
Variável Errada sendo Usada
Quando você tem mais de uma variável com o mesmo nome, o compilador do Visual Basic tenta resolver cada referência a esse nome. Se as variáveis tiverem um escopo diferente, o compilador resolverá uma referência à declaração com o escopo mais estreito. 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.
Abordagem Correta
Evite usar variáveis com o mesmo nome, mas escopo diferente. Se você estiver usando outros assemblies ou projetos, evite usar todos os nomes definidos nesses componentes externos o máximo possível. Se você tiver mais de uma variável com o mesmo nome, verifique se qualificou todas as referências a ela. Para obter mais informações, consulte Referências a Elementos Declarados.