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