Instrução Namespace

Declara o nome de um namespace e faz com que o código-fonte que segue a declaração seja compilado nesse namespace.

Sintaxe

Namespace [Global.] { name | name.name }
    [ componenttypes ]
End Namespace

Partes

Opcional Global. Permite definir um namespace fora do namespace raiz do projeto. Confira Namespaces no Visual Basic.

name Necessário. Um nome exclusivo que identifica o namespace. Deve ser um identificador válido do Visual Basic. Para obter mais informações, consulte Nomes do Elemento Declarado.

componenttypes Opcional. Elementos que compõem o namespace. Eles incluem, entre outros, enumerações, estruturas, interfaces, classes, módulos, delegados e outros namespaces.

End Namespace Encerra um bloco Namespace.

Comentários

Namespaces são usados como um sistema organizacional. Eles fornecem uma forma de classificar e apresentar elementos de programação expostos a outros programas e aplicativos. Observe que um namespace não é um tipo no sentido de que uma classe ou estrutura é — você não pode declarar que um elemento de programação tenha o tipo de dados de um namespace.

Todos os elementos de programação declarados após uma Namespace instrução pertencem a esse namespace. O Visual Basic continua compilando elementos no último namespace declarado até encontrar uma instrução End Namespace ou Namespace.

Se um namespace já estiver definido, mesmo fora do projeto, você poderá adicionar elementos de programação a ele. Para fazer isso, use uma instrução Namespace para direcionar o Visual Basic e compilar elementos nesse namespace.

Você pode usar uma instrução Namespace somente no âmbito do arquivo ou do namespace. Isso significa que o contexto de declaração para um namespace precisa ser de um arquivo de origem ou outro namespace e não pode ser uma classe, uma estrutura, um módulo, uma interface ou um procedimento. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.

Você pode declarar um namespace dentro de outro. Não há um limite estrito para os níveis de aninhamento que você pode declarar, mas lembre-se de que quando outro código acessa os elementos declarados no namespace mais interno, ele deve usar uma cadeia de caracteres de qualificação que contenha todos os nomes de namespace na hierarquia de aninhamento.

Nível de acesso

Os namespaces são tratados como se tivessem um nível de acesso Public. Um namespace pode ser acessado do código em qualquer lugar do mesmo projeto, de outros projetos que fazem referência a ele e de qualquer assembly criado por meio do projeto.

Elementos de programação declarados no nível do namespace, ou seja, em um namespace, mas não dentro de qualquer outro elemento, podem ter Public ou acessar Friend. Se não especificado, o nível de acesso desse elemento usa Friend por padrão. Os elementos que você pode declarar no nível do namespace incluem classes, estruturas, módulos, interfaces, enumerações e delegados. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão.

Namespace raiz

Todos os nomes de namespace no projeto são baseados em um namespace raiz. O Visual Studio atribui o nome do projeto como o namespace raiz padrão para todos os códigos no projeto. Por exemplo, se o projeto for nomeado Payroll, os elementos de programação pertencem ao namespace Payroll. Se você declarar Namespace funding, o nome completo desse namespace será Payroll.funding.

Se você quiser especificar um namespace existente em uma instrução Namespace, como no exemplo de classe de lista genérica, poderá definir o namespace raiz como um valor nulo. Para fazer isso, clique em Propriedades do Projeto no menu Projeto e desmarque a entrada de namespace raiz para que a caixa esteja vazia. Se você não fez isso no exemplo de classe de lista genérica, o compilador do Visual Basic assumiria System.Collections.Generic como um novo namespace dentro do projeto Payroll, com o nome completo de Payroll.System.Collections.Generic.

Como alternativa, você pode usar a palavra-chave Global para se referir a elementos de namespaces definidos fora do projeto. Isso permite manter o nome do projeto como o namespace raiz. Isso reduz a chance de mesclar involuntariamente os elementos de programação com os dos namespaces existentes. Para obter mais informações, confira a seção "Palavra-chave global em nomes totalmente qualificados" em Namespaces no Visual Basic.

A palavra-chave Global também pode ser usada em uma instrução Namespace. Isso permite definir um namespace fora do namespace raiz do projeto. Para obter mais informações, confira a seção "Palavra-chave nas declarações de Namespace global" em Namespaces no Visual Basic.

Solução de problemas. O namespace raiz pode levar a concatenações inesperadas de nomes de namespace. Se você fizer referência a namespaces definidos fora do projeto, o compilador do Visual Basic poderá interpretá-los como aqueles aninhados no namespace raiz. Nesse caso, o compilador não reconhece nenhum tipo que já tenha sido definido nos namespaces externos. Para evitar isso, defina o namespace raiz como um valor nulo, conforme descrito em "Namespace Raiz", ou use a palavra-chave Global para acessar elementos de namespaces externos.

Atributos e Modificadores

Você não pode aplicar atributos a um namespace. Um atributo contribui com informações para os metadados do assembly, o que não é significativo para classificadores de origem, como namespaces.

Você não pode aplicar nenhum modificador de acesso ou procedimento, ou qualquer outro modificador, a um namespace. Esses modificadores não são significativos, pois não são um tipo.

Exemplo 1

O exemplo a seguir declara dois namespaces, um aninhado no outro.

Namespace n1
    Namespace n2
        Class a
            ' Insert class definition.
        End Class
    End Namespace
End Namespace

Exemplo 2

O exemplo a seguir declara vários namespaces aninhados em uma linha única e é equivalente ao exemplo anterior.

Namespace n1.n2
    Class a
        ' Insert class definition.
    End Class
End Namespace

Exemplo 3

O exemplo a seguir acessa a classe definida nos exemplos anteriores.

Dim instance As New n1.n2.a

Exemplo 4

O exemplo a seguir define o esqueleto de uma nova classe de lista genérica e o adiciona ao namespace System.Collections.Generic.

Namespace System.Collections.Generic
    Class specialSortedList(Of T)
        Inherits List(Of T)
        ' Insert code to define the special generic list class.
    End Class
End Namespace

Confira também