Namespaces
Em C#, um namespace é um contêiner organizacional para classes e outros namespaces. Sua principal finalidade é fornecer um nível de separação para o código, ajudando a evitar conflitos de nomes e a estruturar grandes projetos de forma lógica.
Pense em um namespace como o sobrenome de uma classe. Você pode ter duas pessoas chamadas "João", mas elas são diferentes se uma for "João Silva" e a outra "João Souza". Da mesma forma, você pode ter duas classes Cliente, desde que elas estejam em namespaces diferentes (ex: MeuApp.Vendas.Cliente e MeuApp.Suporte.Cliente).
Declaração e Estrutura
Um namespace é declarado com a palavra-chave namespace, seguida por um nome e um bloco de código {} contendo as classes.
Relação com a Estrutura de Pastas
Por convenção, a estrutura de namespaces de um projeto espelha a estrutura de pastas. Isso torna a navegação e a localização de arquivos muito mais intuitivas.
Se você tem um arquivo na pasta
Projeto/Models/User.cs, o namespace dentro deUser.csdeve serProjeto.Models.Se você tem um arquivo em
Projeto/Services/Payment/PayPalService.cs, o namespace deve serProjeto.Services.Payment.
As IDEs modernas, como o Visual Studio e o Rider, gerenciam essa estrutura automaticamente ao criar novos arquivos.
Namespaces Aninhados
Você pode aninhar namespaces para criar hierarquias ainda mais detalhadas.
O Namespace Global
Qualquer tipo que não é declarado dentro de um namespace reside no namespace global. Isso é geralmente desaconselhado para evitar poluir o escopo global e criar possíveis conflitos com outras bibliotecas.
Boas Práticas
Um Tipo por Arquivo: Mantenha apenas uma classe, struct, interface ou enum por arquivo. O nome do arquivo deve corresponder ao nome do tipo (ex:
Cliente.cscontém a classeCliente).Espelhe a Estrutura de Pastas: Sempre faça seus namespaces corresponderem à hierarquia de pastas do seu projeto.
Nomes Significativos: Use nomes que descrevam claramente a funcionalidade contida no namespace (ex:
MeuApp.Data,MeuApp.UI,MeuApp.Utilities).