Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 09.1 — Construtores Primários no C# 12 (Primary Constructors)

Contexto: Construtores Primários no C# 12 (Primary Constructors) no contexto de Classes, Construtores Primários e Encapsulamento.

Requisitos de Execução:

  1. Declarar classe public class ServicoEmail(string servidor, int porta) utilizando construtor primário conciso.

Resultado Esperado

Classe declarada com construtor primário do C# 12 sem campos de inicialização boilerplate.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_1_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Classes, Construtores Primários e Encapsulamento
🔑 Gabarito de Código & Solução Comentada
// PrimaryConstructor.cs
public class ServicoEmail(string servidor, int porta) {
    public void Enviar(string msg) {
        Console.WriteLine($"Enviando via {servidor}:{porta} -> {msg}");
    }
}

var srv = new ServicoEmail("smtp.empresa.com", 587);
srv.Enviar("Notificacao de login");

🔍 Nível 2: Prática

Problema 09.2 — Propriedades com Modificador init e Campos required

Contexto: Propriedades com Modificador init e Campos required no contexto de Classes, Construtores Primários e Encapsulamento.

Requisitos de Execução:

  1. Criar DTO com public required string Nome { get; init; } garantindo preenchimento obrigatório na inicialização.

Resultado Esperado

Objeto instanciado com propriedades imutáveis pós-construção.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_2_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Classes, Construtores Primários e Encapsulamento
🔑 Gabarito de Código & Solução Comentada
// RequiredInit.cs
public class UsuarioDto {
    public required string Email { get; init; }
    public required string Perfil { get; init; }
}

var user = new UsuarioDto { Email = "admin@empresa.com", Perfil = "Administrador" };
Console.WriteLine($"Usuario: {user.Email} ({user.Perfil})");

⚡ Nível 3: Integração

Problema 09.3 — Membros Estáticos, Classes Estáticas e Construtores Estáticos

Contexto: Membros Estáticos, Classes Estáticas e Construtores Estáticos no contexto de Classes, Construtores Primários e Encapsulamento.

Requisitos de Execução:

  1. Criar classe utilitária ConfiguradorGlobal com construtor estático executado uma única vez na primeira referência.

Resultado Esperado

Construtor estático inicializando variáveis globais de ambiente.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_3_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Classes, Construtores Primários e Encapsulamento
🔑 Gabarito de Código & Solução Comentada
// StaticDemo.cs
public static class ConfiguradorGlobal {
    public static string AppNome { get; }
    static ConfiguradorGlobal() {
        AppNome = "PortalCorporativo";
        Console.WriteLine("Construtor estatico executado!");
    }
}

Console.WriteLine($"Sistema: {ConfiguradorGlobal.AppNome}");

🏆 Nível 4: Desafio Corporativo

Problema 09.4 — Encapsulamento com Modificadores de Acesso Modernos (file-scoped classes)

Contexto: Encapsulamento com Modificadores de Acesso Modernos (file-scoped classes) no contexto de Classes, Construtores Primários e Encapsulamento.

Requisitos de Execução:

  1. Restringir visibilidade de classe auxiliar ao arquivo atual utilizando file class Auxiliar.

Resultado Esperado

Classe auxiliar estritamente escopada ao arquivo fonte sem poluição de namespace.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_4_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Classes, Construtores Primários e Encapsulamento
🔑 Gabarito de Código & Solução Comentada
// FileScoped.cs
file class HelperInterno {
    public static void Log() => Console.WriteLine("Acesso restrito ao arquivo atual.");
}

HelperInterno.Log();

Console.WriteLine("Status de execucao: 200 OK");
Debug.Assert(true);