Início » C# » C# – Namespaces

C# – Namespaces

Em C#, um namespace é um mecanismo de controle da visibilidade de nomes dentro de um programa. Ele agrupa classes e tipos por semântica e é declarado com a palavra-chave namespace. O exemplo abaixo ilustra a criação de um agrupamento de classes utilizando um namespace.

namespace MinhaEmpresa
{
    public class Cliente
    {
        public string Nome;
        public string Telefone;
    }

    public class Fornecedor
    {
        public string Contato;
        public string Telefone;
    }
}

Para instanciar a classe Cliente, é necessário usar seu nome completo:

MinhaEmpresa.Cliente cliente = new MinhaEmpresa.Cliente();

No contexto de utilização de um namespace, a diretiva using tem o papel de simplificar o uso desses agrupamentos, seja encurtando o caminho para eles ou estabelecendo um alias, ou seja, importa um namespace.

Por exemplo, para instanciar uma classe Queue do .NET Framework, a qual representa uma fila, é necessário chama-la pelo seu nome completo, System.Collections.Queue. A diretiva using colocada no início do programa simplifica a forma de uso da classe. Uma ou mais diretivas podem ser colocadas no início do programa.

using System;
using System.Collections;

public class Fila
{
    public static void Main()
    {
        Queue fila = new Queue(5);

        //int
        fila.Enqueue(1);    
        //string
        fila.Enqueue("2");
        //char
        fila.Enqueue('3');
        //long
        fila.Enqueue(4L);
        //double
        fila.Enqueue(5F);

        Console.WriteLine("Esta fila possui {0} elementos", fila.Count);

        for (int a=0, 1=fila.Count; a < 1; ++a)
        {
            Console.WriteLine(fila.Dequeue().ToString());
        }
    }
}

O programa acima poderia ser escrito sem a utilização da diretiva using; porém, onde existem as classes Queue e Console, estas deveriam ser renomeadas para System.Collections.Queue e System.Console, respectivamente. A diretiva using elimina certas redundâncias, como a necessidade de usar o nome completo.

Nos namespaces aninhados, todos os nomes apresentados em namespaces externos são importados implicitamente para os namespaces internos. No exemplo abaixo, os nomes Middle e Class1 são importados implicitamente para Inner:

namespace Outer
{
    namespace Middle
    {
        class Class1 { }

        namespace Inner
        {
            class Class2 : Class1 { }
        }
    }
}

O namespace mais interno é chamado de inner namespace, e o mais externo é chamado de outer namespace.

Outra forma de escrever um namespace é simplificar o namespace aninhado para torna-lo longo. Isso é feito utilizando-se o operador ponto (.) para separar os nomes que comportarão o namespace.

namespace Terra.AmericaDoSul.Brasil.SaoPaulo
{
    class MinhaClasse { }
}

Para acessar a classe MinhaClasse, referencie o nome completo ou utilize a diretiva using para facilitar o acesso.

Terra.AmericaDoSul.Brasil.SaoPaulo.MinhaClasse classe;

Os namespaces longos e aninhados podem ser combinados.

Importar um namespace pode resultar em um choque com o nome de tipo. Em vez de importar o namespace inteiro, você pode importar apenas os tipos específicos de que necessita, atribuindo um alias (apelidos) a cada tipo. Por exemplo:

using PropertyInfo2 = System.Reflection.PropertyInfo;

class Program 
{
    PropertyInfo2 p;
}

Um namespace extenso pode ter um alias caractere, conforme abaixo:

using R = System.Reflection;

class Program
{
    R.PropertyInfo p;
}

Concluindo:

  • O namespace é um recurso que permite a organização por semântica e, se aplicado corretamente, evita a colisão de nomes.
  • Um namespace pode ser encontrado na forma simples, aninhado ou longo.
  • O principal objetivo de um namespace é criar um nome global único que o diferencie dos demais.
  • A diretiva using é usada em conjunto com um namespace para encurtar o caminho até os tipos contidos nele. Com using, é permitido a criação de alias.
  • Os namespaces podem ser agrupados e ter sua origem em diversos códigos, bibliotecas e módulos.

Referências Bibliográficas:

ALBAHARI, Joseph; ALBAHARI, Ben. C# 3.0: Guia de Bolso. Rio de Janeiro: Alta Books, 2008.
GALUPPO, Fabio; MATHEUS, Vanclei; SANTOS, Wallace. Desenvolvendo com C#. Porto Alegre: Bookman, 2004.


2 Comentários

  1. Excelente artigo Andrielle, parabéns!

    Abraços.

  2. jucinei disse:

    Excelente, parabens😀

Deixe uma resposta

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: