Namespaces C#
O que são Namespaces?
Namespaces em C# são conjuntos de identificadores que tem como função agrupar funcionalidades comuns assim também organizando-as.
Namespaces também prestam assistência em nome evitando confrontos entre os dois conjuntos de código. Implementar Namespaces no seu código é um bom hábito, pois pode lhe poupar de problemas futuros, quando você quiser reutilizar alguns de seus códigos.
Por exemplo, em um projeto MVC, tenho uma namespace para Minha empresa (Empresa), uma para controladores (Controllers) e uma para visões (Views), nesse caso criamos name espaces para determinados locais e temos um melhor controle de cada um deles.
Dentro de cada Namespaces controlamos classes, objetos.
namespace MinhaEmpresa{public class Cliente{
public string Nome;
public string Telefone;
}public class Fornecedor{
public string Contato;
public string Telefone;
}
}
Para instanciar (criar) a classe Cliente, é necessário usar seu nome completo:
Empresa.Cliente cliente = new Empresa.Cliente();
No contexto da utilização de um namespace, a diretiva using tem como papel simplificar o uso desses agrupamentos, seja encurtando o caminho para eles ou estabelecendo um alias(apelidos), ou seja, importa um namespace.
Outro exemplo:
Para instanciar uma classe Queue (fila) do .NET Framework, é necessário chama-la pelo seu nome completo, definido como: 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.
Exemplo:
O código acima poderia ser escrito sem a usarmos a diretiva using; porém, onde existem as classes Queue e Console, elas deveriam ser renomeadas para: System.Collections.Queue e System.Console. A diretiva using elimina algumas redundâncias, tais como a necessidade de usar o nome completo.
Nos namespaces protegidos, 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:
O namespace interno é chamado de inner namespace, e o externo é chamado de outer namespace.
Outra maneira de escrever um namespace é simplificando-o, pegando o namespace aninhado e tornando-o mais longo. Isso é feito utilizando-se o operador ponto (.) para separar os nomes que estarão no namespace.
Para acessar a classe NovaClasse, referencie o nome completo ou utilize a diretiva using para facilitar o acesso.
namespace Terra.AmericaDoNorte.EUA.Canada.NovaClasse classe;
Os namespaces longos e aninhados podem ser combinados.
Importar um namespace pode resultar em um choque com o nome de tipo. Ao invés de importar o namespace todo, você pode importar apenas os tipos específicos de que necessita, atribuindo um alias (apelidos) a cada tipo. Por exemplo:
Um namespace extenso pode ter um alias caractere, conforme abaixo:
https://gist.github.com/DiegoTeles/cc6058f2e065a86cff0066021259ecb3
Namespaces Encadeados
Assim como as pastas de sistemas operacionais os namespaces podem ser colocados dentro de outros namespaces.
namespace MinhaEmpresa {
namespace MinhaEmpresa2 {
class cliente {
public string Contato;
public string Telefone;
}
}
}
Concluímos que namespaces:
- é um recurso que permite a organização e, se aplicado corretamente, evita a colisão de nomes e facilita na reutilização do código.
- Pode ser encontrado na forma simples, aninhado ou longo.
- O principal objetivo é 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(apelidos).
- Podem ser agrupados e ter sua origem em diversos códigos, bibliotecas e módulos.
- Namespaces podem estar encadeadas, ou seja, dentro de outras namespaces.
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.
Este artigo foi escrito em 2015 quando iniciei minha carreira na área de tech e achei ele publicado em um antigo blog que eu tinha, como todo conhecimento é valido, aqui está ele.