Declaração de namespace

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

Sintaxe

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

Partes

Global Opcional. Permite que você defina um namespace fora do namespace raiz do seu projeto. Consulte 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 de elementos declarados.

componenttypes Opcional. Elementos que compõem o namespace. Eles incluem, mas não estão limitados a, enumerações, estruturas, interfaces, classes, módulos, delegados e outros namespaces.

End Namespace Encerra um Namespace bloco.

Observações

Os namespaces são usados como um sistema organizacional. Eles fornecem uma maneira de classificar e apresentar elementos de programação que sã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 um elemento de programação para ter o tipo de dados de um namespace.

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

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

Você pode usar uma Namespace instrução somente no nível de arquivo ou namespace. Isso significa que o contexto de declaração para um namespace deve ser um arquivo de origem ou outro namespace e não pode ser uma classe, estrutura, módulo, interface ou 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 Public acesso. Um namespace pode ser acessado a partir do código em qualquer lugar no mesmo projeto, de outros projetos que fazem referência ao projeto e de qualquer assembly criado a partir do projeto.

Os 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 Friend acessar. Se não for especificado, o nível de acesso desse elemento é usado Friend por padrão. Os elementos que você pode declarar no nível de 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 em seu projeto são baseados em um namespace raiz. Visual Studio atribui o nome do projeto como o namespace raiz padrão para todo o código em seu projeto. Por exemplo, se o seu projeto for nomeado Payroll, seus elementos de programação pertencem ao namespace Payroll. Se você declarar Namespace funding, o nome completo desse namespace será Payroll.funding.

Se desejar especificar um namespace existente em uma Namespace instrução, como no exemplo de classe de lista genérica, você pode definir seu namespace raiz como um valor nulo. Para fazer isso, clique em Propriedades do projeto no menu Projeto e, em seguida, 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 tomaria 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 Global palavra-chave para se referir a elementos de namespaces definidos fora do seu projeto. Isso permite que você mantenha o nome do projeto como o namespace raiz. Isso reduz a chance de mesclar involuntariamente seus elementos de programação com os de namespaces existentes. Para obter mais informações, consulte a seção "Global Keyword in Fully Qualified Names" em Namespaces no Visual Basic.

A Global palavra-chave também pode ser usada em uma instrução Namespace. Isso permite que você defina um namespace fora do namespace raiz do seu projeto. Para obter mais informações, consulte a seção "Global Keyword in Namespace Statements" em Namespaces in Visual Basic.

Resoluçã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 seu projeto, o compilador do Visual Basic pode interpretá-los como namespaces 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 seu namespace raiz como um valor nulo, conforme descrito em "Namespace raiz", ou use a Global palavra-chave para acessar elementos de namespaces externos.

Atributos e modificadores

Não é possível 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.

Não é possível aplicar nenhum modificador de acesso ou procedimento, ou qualquer outro modificador, a um namespace. Por não ser um tipo, esses modificadores não são significativos.

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 única linha 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 System.Collections.Generic namespace.

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

Consulte também