Compartilhar via


Namespaces no Visual Basic

Namespaces organizam os objetos definidos em um assembly. Módulos (assemblies) pode conter vários espaços para nome, que por sua vez podem conter outros namespaces. Namespaces evitar ambigüidade e simplificar as referências ao usar grandes grupos de objetos, como bibliotecas de classe.

Por exemplo, o .NET Framework define o ListBox classe na System.Windows.Forms espaço para nome. O fragmento de código a seguir mostra como declarar uma variável usando o nome totalmente qualificado para esta classe:

Dim LBox As System.Windows.Forms.ListBox

Evitando conflitos de nome

.NET Frameworknamespaces resolver um problema que às vezes chamado de a poluição de namespace, no qual o desenvolvedor de uma biblioteca de classes é dificultado pelo uso de nomes semelhantes em outra biblioteca. Esses conflitos com os componentes existentes, às vezes são chamados os conflitos de nome.

Por exemplo, se você criar uma nova classe chamada ListBox, você pode usá-lo dentro de seu projeto sem qualificação. No entanto, se você quiser usar o .NET FrameworkListBox classe no mesmo projeto, você deve usar uma referência totalmente qualificada para fazer a referência exclusivo.  Se a referência não é exclusiva, Visual Basic produz um erro informando que o nome é ambíguo. O exemplo de código a seguir demonstra como declarar esses objetos:

' Define a new object based on your ListBox class. 
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control. 
Dim MyLB As New System.Windows.Forms.ListBox

A ilustração a seguir mostra duas hierarquias de namespace, tanto que contém um objeto chamado ListBox.

Hierarquia de namespace

Por padrão, cada arquivo executável que você cria com Visual Basic contém um espaço para nome com o mesmo nome de seu projeto. Por exemplo, se você definir um objeto dentro de um projeto chamado ListBoxProject, o arquivo executável ListBoxProject.exe contém um namespace chamado ListBoxProject.

Vários assemblies podem usar o mesmo namespace. Visual Basictrata-los como um único conjunto de nomes. Por exemplo, você pode definir classes para um namespace chamado SomeNameSpace em um assembly chamado Assemb1e definir classes adicionais para o mesmo espaço para nome de um assembly chamado Assemb2.

Nomes totalmente qualificados

Nomes totalmente qualificados são referências de objeto que são prefixadas com o nome do namespace no qual o objeto é definido. Você pode usar objetos definidos em outros projetos, se você criar uma referência à classe (escolhendo Add Reference da projeto menu) e, em seguida, usar o nome totalmente qualificado para o objeto no seu código. O fragmento de código a seguir mostra como usar o nome totalmente qualificado para um objeto de namespace do projeto:

Dim LBC As New ListBoxProject.Form1.ListBox

Nomes totalmente qualificados impedem a nomeação entra em conflito porque eles tornam possível para o compilador determinar qual objeto está sendo usado. No entanto, os próprios nomes podem ser longo e complicado. Para contornar esse problema, você pode usar o Imports a instrução para definir um alias— um nome abreviado, você pode usar no lugar de um nome totalmente qualificado. Por exemplo, o exemplo de código a seguir cria aliases para os dois nomes totalmente qualificados e usa esses aliases para definir os dois objetos.

Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox

Se você usar o Imports instrução sem alias, você pode usar todos os nomes que fornecida de namespace sem qualificação, eles são exclusivos para o projeto. Se seu projeto contém Imports instruções para namespaces que contêm itens com o mesmo nome, você deve qualificar totalmente esse nome quando você usá-lo. Suponha, por exemplo, o seu projeto contidos nas próximas duas Imports instruções:

' This namespace contains a class called Class1. 
Imports MyProj1
' This namespace also contains a class called Class1. 
Imports MyProj2

Se você tentar usar Class1 sem qualificar totalmente, Visual Basic produz um erro informando que o nome Class1 é ambíguo.

Declarações de nível de namespace

Em um namespace, você pode definir itens como, por exemplo, módulos, interfaces, classes, delegados, enumerações, estruturas e outros espaços para nome. Você não pode definir itens como, por exemplo, propriedades, procedimentos, variáveis e eventos em nível de namespace. Esses itens devem ser declarados em recipientes como, por exemplo, módulos, classes ou estruturas.

Global palavra-chave em nomes totalmente qualificados

Se você tiver definido uma hierarquia aninhada de namespaces, o código dentro dessa hierarquia poderá ser impedido de acessar o namespace System do .NET Framework. O exemplo a seguir ilustra uma hierarquia na qual o namespace SpecialSpace.System bloqueia o acesso à System.

Namespace SpecialSpace
    Namespace System
        Class abc
            Function getValue() As System.Int32
                Dim n As System.Int32
                Return n
            End Function
        End Class
    End Namespace
End Namespace

Como resultado, o compilador do Visual Basic não consegue resolver com êxito a referência à Int32, porque SpecialSpace.System não define Int32. Você pode usar a palavra-chave Global para iniciar a cadeia de qualificação no nível mais externo de biblioteca de classes do .NET Framework. Isso permite que você especifique o namespace System ou qualquer outro namespace na biblioteca de classes. O exemplo a seguir ilustra isto:

Namespace SpecialSpace
    Namespace System
        Class abc
            Function getValue() As Global.System.Int32
                Dim n As Global.System.Int32
                Return n
            End Function
        End Class
    End Namespace
End Namespace

Você pode usar Global para acessar outros namespaces no nível da raiz, como Microsoft.VisualBasic, e qualquer namespace associado ao projeto.

Global palavra-chave nas declarações de Namespace

Você também pode usar o Global palavra-chave em um Instrução Namespace. Isso permite que você defina um espaço para nome do namespace raiz do seu projeto.

Todos os namespaces em seu projeto baseiam-se no namespace raiz para o projeto. Visual Studio atribui o nome do projeto como o namespace raiz padrão de todo o código no seu projeto. Por exemplo, se seu projeto for chamado ConsoleApplication1,seus elementos de programação pertencem ao namespace ConsoleApplication1. Se você declarar Namespace Magnetosphere, referências a Magnetosphere no projeto acessará ConsoleApplication1.Magnetosphere.

Os exemplos seguintes usam a Global palavra-chave para declarar um espaço para nome do namespace raiz para o projeto.

Namespace Global.Magnetosphere

End Namespace 


Namespace Global 
    Namespace Magnetosphere

    End Namespace 
End Namespace

Em uma declaração de namespace, Global não pode ser aninhado em outro espaço para nome.

Você pode usar o Página de Aplicativo, Designer de Projeto (Visual Basic) para exibir e modificar o Namespace raiz do projeto. Para novos projetos, o Namespace raiz o padrão é o nome do projeto. Para fazer com que Global para ser o namespace de alto nível, você pode limpar o Namespace raiz entrada para que a caixa está vazia. Limpando Namespace raiz elimina a necessidade da Global palavra-chave em declarações de namespace.

Se um Namespace instrução declara um nome que também é um espaço para nome na.NET Framework, o.NET Framework namespace fica indisponível se a Global palavra-chave não é usado em um nome totalmente qualificado. Para permitir o acesso que.NET Framework namespace sem usar o Global palavra-chave, você pode incluir o Global palavra-chave na Namespace instrução.

O exemplo a seguir tem o Global palavra-chave na System.Text declaração de namespace.

Se a Global palavra-chave não estava presente na declaração de namespace, StringBuilder não pôde ser acessado sem especificação de Global.System.Text.StringBuilder. Para um projeto chamado ConsoleApplication1, referências a System.Text acessaria ConsoleApplication1.System.Text se a Global não foi usada a palavra-chave.

Module Module1
    Sub Main()
        Dim encoding As New System.Text.TitanEncoding

        ' If the namespace defined below is System.Text 
        ' instead of Global.System.Text, then this statement 
        ' causes a compile-time error. 
        Dim sb As New System.Text.StringBuilder
    End Sub 
End Module 

Namespace Global.System.Text
    Class TitanEncoding

    End Class 
End Namespace

Consulte também

Tarefas

Como criar e usar assemblies usando a linha de comando (C# e Visual Basic)

Referência

Instrução Imports (tipo e namespace .NET)

ListBox

System.Windows.Forms

Conceitos

Assemblies e o cache de assemblies global (C# e Visual Basic)

Referências e a instrução Imports (Visual Basic)

Escrevendo código em soluções do Office