Referências aos elementos declarados (Visual Basic)

Quando seu código se refere a um elemento declarado, o Visual Basic compilador corresponde ao nome na sua referência para a declaração apropriada desse nome.Se mais de um elemento for declarado com o mesmo nome, você pode controlar quais desses elementos é para ser referenciado por qualificação seu nome.

O compilador tenta comparar uma referência de nome a uma declaração de nome com o escopo mais restrito.Isso significa que ele começa com o código fazendo a referência e trabalha externamente através de níveis sucessivos de elementos recipientes.

O exemplo a seguir mostra as referências a duas variáveis com o mesmo nome.O exemplo declara duas variáveis, cada um nomeado totalCount, em diferentes níveis de escopo no módulo container.Quando o procedimento showCount exibe totalCount sem qualificação, o compilador Visual Basic resolve a referência para a declaração com o menor escopo, como a declaração dentro de showCount.Quando ele qualifica totalCount com o módulo recipiente container,o compilador resolve a referência para a declaração com o 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

Um nome de elemento de qualificação.

Se você 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, você também precisa qualificar o elemento que contém.

Classificar um nome significa precedê-lo na sua declração-fonte com informações que identificam onde o elemento-alvo está definido.Esta informação é chamada uma cadeia de caracteres de classificação.Pode incluir um ou mais namespaces e um módulo, classe ou estrutura.

A cadeia de caracteres de classificação deve especificar, de forma não ambígua, o módulo, classe ou estrutura contendo o elemento alvo.O contêiner pode ser colocado por vez em um outro contendo elemento, normalmente um namespace.Você pode precisar incluir vários elementos continentes na cadeia de caracteres de classificação.

Para acessar um elemento declarado classificando seu nome

  1. Determine a localização na qual o elemento foi definido.Pode incluir um namespace, ou mesmo uma hierarquia de namespaces.Dentro do namespace de menor nível, o elemento precisa estar incluído num 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 Namespace
  2. Determine o caminho de classificação na localização do elemento-alvo.Inicie com o namespace de maior nível, prossiga para o de menor nível, e finalize com o módulo, classe ou estrutura contendo o elemento-alvo.Cada elemento no caminho deve conter um elemento que o segue.

    outerSpace → innerSpace → holdsTotals → totals

  3. Prepare a cadeia de caracteres de classificação para o elemento-alvo.Coloque um ponto final (.) depois de todo elemento no caminho.Seu aplicativo precisa ter acesso a todos os elementos de sua cadeia de caracteres de classificação.

    outerSpace.innerSpace.holdsTotals.totals.
  4. Escreva a expressão ou afirmação de designação referindo-se ao elemento-alvo de modo normal.

    grandTotal = 9000
  5. Coloque a cadeia de caracteres de classificação à frente do nome do elemento-alvo.O nome deve seguir imediatamente o ponto final (.) 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 Module
  6. O compilador usa a cadeia de caracteres de classificação para achar uma declaração clara e livre de ambiguidades para a qual ele possa equiparar à referência do elemento-alvo.

Você pode também ter que qualificar uma referência de nome se seu aplicativo tiver acesso a mais de um elemento de programação que tem o mesmo nome.Por exemplo, os namespaces System.Windows.Forms e System.Web.UI.WebControls contém ambos uma classe Label (System.Windows.Forms.Label e System.Web.UI.WebControls.Label).Se o aplicativo usa ambas, ou se ele define sua própria classe Label,você deve distinguir os objetos Label diferentes.Inclua o alias do namespace ou de importação na declaração de variável.O exemplo a seguir utiliza 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 Recipientes

Quando você usa um membro não compartilhado de outra classe ou estrutura, primeiro você deve qualificar o nome do membro com uma variável ou expressão que aponta para uma instância da classe ou estrutura.No exemplo a seguir, demoClass é uma instância de uma classe denominada 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 (Visual Basic).Você deve primeiro criar uma instância em um variável de objeto (nesse caso demoClass) e, em seguida, fazer referência a ela, através do nome de variável.

Se uma classe ou estrutura tiver um membro Shared, você pode qualificar desse membro com o nome de classe ou estrutura ou com uma variável ou expressão que aponte para uma instância.

Um módulo não tem nenhuma instância separada, e todos os seus membros são Shared por padrão.Portanto, você qualifica um membro de módulo com o nome do módulo.

O exemplo a seguir mostra referências qualificadas a procedimentos de membro de módulo.O exemplo declara dois Sub procedimentos, ambos chamados perform, nos diferentes módulos em um projeto.Cada um deles pode ser especificado sem qualificação no seu próprio módulo mas deve ser qualificado se referenciado de qualquer outro lugar.Como referência final em module3 não se qualifica como 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 Público (Visual Basic) definidos em outro projeto, você deve primeiro definir uma referência para o conjunto de módulos do projeto (assembly) ou para a biblioteca de tipos.Para definir uma referência, clique em Add Reference no menu Projeto, ou usa a opção do compilador em linha de comando /Reference (Visual Basic).

Por exemplo, você pode usar o modelo de objeto XML de .NET Framework.Se você definir uma referência ao namespace System.Xml, você poderá declarar e usar qualquer uma das 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

Importando Elementos Recipientes

Você pode usar Importa instrução (.NET espaço para nome e tipo) para import os namespaces que contêm os módulos ou classes que você deseja usar.Isso permite que você se refira aos elementos definidos em um namespace importado sem qualificar totalmente seus nomes.O exemplo a seguir reescreve o exemplo anterior para importar o namespace System.Xml.

' 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 declaração Imports 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 namespace System.Xml.

' 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 declaração Imports não torna os elementos de outros projetos disponíveis para seu aplicativo.Ou seja, ele não definirá uma referência.Importar um namespace apenas remove a necessidade de qualificar nomes definidos nesse namespace.

Você também pode usar a declaração Imports para importar os módulos, classes, estruturas e enumerações.Em seguida, você pode usar os membros de tais elementos importados sem qualificação.No entanto, você sempre deve qualificar os membros não compartilhados de classes e estruturas com uma variável ou expressão que avalia para uma instância da classe ou estrutura.

Nomeando Diretrizes

Quando você define dois ou mais elementos de programação que têm o mesmo nome, uma ambiguidade de nomes pode resultar quando o compilador tenta resolver uma referência a esse nome.Se mais de uma definição estiver em escopo, ou se nenhuma definição estiver em escopo, não é possível resolver a referência..Para obter um exemplo, consulte "Exemplo de Referência Qualificada " nessa página da Ajuda.

Você pode evitar ambiguidade de nomes fornecendo nomes exclusivos a todos os seus elementos.Em seguida, você pode fazer referência a qualquer elemento sem precisar qualificar seu nome com um namespace, módulo ou classe.Você também reduzir as chances de acidentalmente se referir ao elemento errado.

Sombreamento

Quando dois elementos de programação compartilham o mesmo nome, um deles pode ocultar, 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, a Visual Basic compilador resolve para o elemento de sombreamento.Para obter uma explicação mais detalhada com exemplos, consulte Sombreamento em Visual Basic.

Consulte também

Tarefas

Como: modificar propriedades do projeto e as definições de configuração

Referência

Importa instrução (.NET espaço para nome e tipo)

Operador New (Visual Basic)

Público (Visual Basic)

Conceitos

Nomes de elementos declarados (Visual Basic)

Características de elemento declarado (Visual Basic)

Variáveis em Visual Basic