🎯 Objetivo: Neste capítulo, vamos abordar como organizar projetos C# de forma profissional, utilizando namespaces e modificadores de acesso para estruturar bem o código e garantir um bom encapsulamento.


📁 O que são Namespaces?

Imagine seu computador. Você não joga todos os seus documentos, fotos e músicas em uma única pasta, certo? Você os organiza em pastas e subpastas para encontrá-los facilmente e separar o que é de trabalho do que é pessoal.

Em C#, namespaces funcionam exatamente como pastas para suas classes. Eles são um mecanismo para organizar classes, structs, interfaces e outros tipos, agrupando-os por funcionalidade, domínio, responsabilidade ou qualquer critério lógico.

Ponto Chave: Namespaces evitam conflitos de nomes (você pode ter uma classe Utils em vários namespaces diferentes sem problemas) e controlam a visibilidade de tipos e membros.


❓ Por Que Usar Namespaces?

Motivos:


🧪 Criando e Usando Namespaces

A declaração de um namespace geralmente envolve o nome do projeto seguido por uma hierarquia lógica. A sintaxe de arquivo é a mais comum em projetos modernos.

// Declaração do namespace para a classe Aluno
namespace Escola.Modelo
{
    public class Aluno
    {
        public string Nome { get; set; }
        public int Matricula { get; set; }

        public Aluno(string nome, int matricula)
        {
            Nome = nome;
            Matricula = matricula;
        }

        public void ExibirDados()
        {
            Console.WriteLine($"Aluno: {Nome}, Matrícula: {Matricula}");
        }
    }
}

📌 Estrutura Comum de Projetos C# (Hierarquia de Pastas)

seu_projeto/
└── MeuProjeto.csproj      (Arquivo do projeto)
└── Modelo/                (Pasta que corresponde ao namespace MeuProjeto.Modelo)
    ├── Aluno.cs
    └── Professor.cs
└── Servico/               (Pasta que corresponde ao namespace MeuProjeto.Servico)
    ├── AlunoService.cs
    └── CalculadoraService.cs
└── Util/                  (Pasta que corresponde ao namespace MeuProjeto.Util)
    └── FormatadorDatas.cs
└── Program.cs             (Ponto de entrada do programa)

⚙️ Como usar classes de outros namespaces

Para usar uma classe que está em um namespace diferente, você precisa "importá-la" usando a palavra-chave using. A declaração using informa ao compilador C# onde encontrar a definição do tipo.