Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Quando o seu código se refere a um elemento declarado, o compilador do Visual Basic associa o nome da sua referência à declaração apropriada desse nome. Se mais de um elemento for declarado com o mesmo nome, você poderá controlar qual desses elementos deve ser referenciado qualificando seu nome.
O compilador tenta corresponder uma referência de nome a uma declaração de nome com o escopo mais estreito. Isso significa que ele começa com o código que faz a referência e expande-se através de níveis sequenciais de elementos de contenção.
O exemplo a seguir mostra referências a duas variáveis com o mesmo nome. O exemplo declara duas variáveis, cada uma com o nome totalCount, em diferentes níveis de escopo no módulo container. Quando o procedimento showCount exibe totalCount sem qualificação, o compilador do Visual Basic resolve a referência à declaração com o escopo mais estreito, ou seja, a declaração local dentro do showCount. Quando qualifica totalCount com o módulo container que contém, o compilador resolve a referência a uma declaração com um escopo mais amplo.
' Assume these two modules are both in the same assembly.
Module container
Public totalCount As Integer = 1
Public Sub showCount()
Dim totalCount As Integer = 6000
' The following statement displays the local totalCount (6000).
MsgBox("Unqualified totalCount is " & CStr(totalCount))
' The following statement displays the module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Module callingModule
Public Sub displayCount()
container.showCount()
' The following statement displays the containing module's totalCount (1).
MsgBox("container.totalCount is " & CStr(container.totalCount))
End Sub
End Module
Qualificando um nome de elemento
Se quiser substituir esse processo de pesquisa e especificar um nome declarado em um escopo mais amplo, você deve qualificar o nome com o elemento que contém o escopo mais amplo. Em alguns casos, poderá também ter de qualificar o elemento contentor.
Qualificar um nome significa precedê-lo na sua declaração de origem com informações que identificam onde o elemento alvo está definido. Essas informações são chamadas de cadeia de caracteres de qualificação. Ele pode incluir um ou mais namespaces e um módulo, classe ou estrutura.
A cadeia de caracteres de qualificação deve especificar inequivocamente o módulo, classe ou estrutura que contém o elemento de destino. O contêiner, por sua vez, pode estar localizado em outro elemento que contém, geralmente um namespace. Talvez seja necessário incluir vários elementos contidos na string de qualificação.
Para acessar um elemento declarado qualificando seu nome
Determine o local em que o elemento foi definido. Isso pode incluir um namespace ou até mesmo uma hierarquia de namespaces. Dentro do namespace de nível mais baixo, o elemento deve estar contido em um módulo, classe ou estrutura.
' Assume the following hierarchy exists outside your code. Namespace outerSpace Namespace innerSpace Module holdsTotals Public Structure totals Public thisTotal As Integer Public Shared grandTotal As Long End Structure End Module End Namespace End NamespaceDetermine um caminho de qualificação com base no local do elemento de destino. Comece com o namespace de nível mais alto, prossiga para o namespace de nível mais baixo e termine com o módulo, classe ou estrutura que contém o elemento de destino. Cada elemento no caminho deve conter o elemento que o segue.
outerSpaceinnerSpace→ →holdsTotals→totalsPrepare a cadeia de caracteres de qualificação para o elemento de destino. Coloque um ponto (
.) após cada elemento no caminho. Seu aplicativo deve ter acesso a todos os elementos em sua cadeia de caracteres de qualificação.outerSpace.innerSpace.holdsTotals.totals.Escreva a expressão ou a instrução de atribuição referente ao elemento de destino da maneira normal.
grandTotal = 9000Preceda o nome do elemento de destino com a cadeia de caracteres de qualificação. O nome deve seguir imediatamente o período (
.) que segue o módulo, classe ou estrutura que contém o elemento.' Assume the following module is part of your code. Module accessGrandTotal Public Sub setGrandTotal() outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000 End Sub End ModuleO compilador utiliza a sequência de qualificação para encontrar uma declaração clara e inequívoca que possa corresponder à referência do elemento de destino.
Também pode ser necessário qualificar uma referência de nome se seu aplicativo tiver acesso a mais de um elemento de programação com o mesmo nome. Por exemplo, os System.Windows.Forms namespaces e System.Web.UI.WebControls contêm uma Label classe (System.Windows.Forms.Label e System.Web.UI.WebControls.Label). Se seu aplicativo usa ambos, ou se ele define sua própria Label classe, você deve distinguir os diferentes Label objetos. Inclua o namespace ou o alias de importação na declaração da variável. O exemplo a seguir usa o alias de importação.
' The following statement must precede all your declarations.
Imports win = System.Windows.Forms, web = System.Web.UI.WebControls
' The following statement references the Windows.Forms.Label class.
Dim winLabel As New win.Label()
Membros de outros elementos contenedores
Ao usar um membro não compartilhado de outra classe ou estrutura, você deve primeiro qualificar o nome do membro com uma variável ou expressão que aponte para uma instância da classe ou estrutura. No exemplo a seguir, demoClass é uma instância de uma classe chamada class1.
Dim demoClass As class1 = New class1()
demoClass.someSub[(argumentlist)]
Não é possível usar o próprio nome da classe para qualificar um membro que não é compartilhado. Você deve primeiro criar uma instância em uma variável de objeto (neste caso demoClass) e, em seguida, fazer referência a ela pelo nome da variável.
Se uma classe ou estrutura tiver um Shared membro, você poderá qualificá-lo com o nome da classe ou estrutura ou com uma variável ou expressão que aponte para uma instância.
Um módulo não tem instâncias separadas e todos os seus membros são Shared por padrão. Portanto, você qualifica um membro do módulo com o nome do módulo.
O exemplo a seguir mostra referências qualificadas aos procedimentos de membros do módulo. O exemplo declara dois Sub procedimentos, ambos nomeados perform, em módulos diferentes em um projeto. Cada um pode ser especificado sem restrição dentro de seu próprio módulo, mas deve ser qualificado se referenciado a partir de outro módulo. Como a referência final em module3 não qualifica perform, o compilador não pode resolver essa referência.
' Assume these three modules are all in the same assembly.
Module module1
Public Sub perform()
MsgBox("module1.perform() now returning")
End Sub
End Module
Module module2
Public Sub perform()
MsgBox("module2.perform() now returning")
End Sub
Public Sub doSomething()
' The following statement calls perform in module2, the active module.
perform()
' The following statement calls perform in module1.
module1.perform()
End Sub
End Module
Module module3
Public Sub callPerform()
' The following statement calls perform in module1.
module1.perform()
' The following statement makes an unresolvable name reference
' and therefore generates a COMPILER ERROR.
perform() ' INVALID statement
End Sub
End Module
Referências a Projetos
Para usar elementos Public definidos noutro projeto, deve primeiro definir uma referência à assembly ou à biblioteca de tipos desse projeto. Para definir uma referência, clique em Adicionar referência no menu Projeto ou use a opção de compilador de linha de comando -reference (Visual Basic).
Por exemplo, você pode usar o modelo de objeto XML do .NET Framework. Se você definir uma referência ao System.Xml namespace, poderá declarar e usar qualquer uma de suas classes, como XmlDocument. O exemplo a seguir usa XmlDocument.
' Assume this project has a reference to System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As System.Xml.XmlDocument
Importação de elementos que contenham
Você pode usar a instrução Imports (.NET Namespace and Type) para importar os namespaces que contêm os módulos ou classes que você deseja usar. Isso permite que você faça referência aos elementos definidos em um namespace importado sem qualificar totalmente seus nomes. O exemplo a seguir reescreve o exemplo anterior para importar o System.Xml namespace.
' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As XmlDocument
Além disso, a Imports instrução pode definir um alias de importação para cada namespace importado. Isso pode tornar o código-fonte mais curto e fácil de ler. O exemplo a seguir reescreve o exemplo anterior para usar xD como um alias para o System.Xml namespace.
' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports xD = System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As xD.XmlDocument
A Imports declaração não disponibiliza elementos de outros projetos para a sua candidatura. Ou seja, não substitui a definição de uma referência. A importação de um namespace apenas remove o requisito para qualificar os nomes definidos nesse namespace.
Você também pode usar a Imports instrução para importar módulos, classes, estruturas e enumerações. Você pode então usar os membros desses elementos importados sem restrição. No entanto, você deve sempre qualificar membros não compartilhados de classes e estruturas com uma variável ou expressão que avalie para uma instância da classe ou estrutura.
Diretrizes de nomenclatura
Quando você define dois ou mais elementos de programação que têm o mesmo nome, uma ambiguidade de nome pode resultar quando o compilador tenta resolver uma referência a esse nome. Se mais de uma definição estiver no âmbito de aplicação, ou se nenhuma definição estiver no âmbito de aplicação, a referência é irresolúvel. Para obter um exemplo, consulte "Exemplo de referência qualificada" nesta página de Ajuda.
Você pode evitar a ambiguidade de nomes dando a todos os seus elementos nomes exclusivos. Em seguida, você pode fazer referência a qualquer elemento sem ter que qualificar seu nome com um namespace, módulo ou classe. Você também reduz as chances de se referir acidentalmente ao elemento errado.
Sombreamento
Quando dois elementos de programação compartilham o mesmo nome, um deles pode esconder, ou sombrear, o outro. Um elemento sombreado não está disponível para referência; em vez disso, quando seu código usa o nome do elemento sombreado, o compilador do Visual Basic o resolve para o elemento de sombreamento. Para obter uma explicação mais detalhada com exemplos, consulte Sombreamento no Visual Basic.