Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 13.1 — Delegates Genéricos Nativos: Func<T, TResult> e Action

Contexto: Delegates Genéricos Nativos: Func<T, TResult> e Action no contexto de Delegates, Eventos, Action, Func e EventHandler.

Requisitos de Execução:

  1. Utilizar Func<decimal, decimal, decimal> para cálculo de taxa e Action<string> para emissão de log.

Resultado Esperado

Delegates genéricos invocados com passagem de parâmetros.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_1_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Delegates, Eventos, Action, Func e EventHandler
🔑 Gabarito de Código & Solução Comentada
// FuncActionDemo.cs
Func<decimal, decimal, decimal> calcularTotal = (preco, taxa) => preco + (preco * taxa);
Action<string> logger = msg => Console.WriteLine($"[LOG]: {msg}");

decimal total = calcularTotal(100m, 0.15m);
logger($"Valor final calculado: R$ {total:F2}");

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

🔍 Nível 2: Prática

Problema 13.2 — Declaração e Disparo Seguro de Eventos com EventHandler

Contexto: Declaração e Disparo Seguro de Eventos com EventHandler no contexto de Delegates, Eventos, Action, Func e EventHandler.

Requisitos de Execução:

  1. Criar classe emissora de eventos PedidoProcessado disparando com Evento?.Invoke(this, args).

Resultado Esperado

Evento customizado emitido e tratado pelos assinantes.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_2_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Delegates, Eventos, Action, Func e EventHandler
🔑 Gabarito de Código & Solução Comentada
// EventDemo.cs
public class PedidoEventArgs : EventArgs { public int PedidoId { get; init; } }

public class MotorVendas {
    public event EventHandler<PedidoEventArgs>? PedidoFinalizado;
    public void Finalizar(int id) => PedidoFinalizado?.Invoke(this, new PedidoEventArgs { PedidoId = id });
}

var motor = new MotorVendas();
motor.PedidoFinalizado += (s, e) => Console.WriteLine($"Notificacao: Pedido #{e.PedidoId} aprovado!");
motor.Finalizar(1001);

⚡ Nível 3: Integração

Problema 13.3 — Multicast Delegates com Encadeamento de Funções (+ e -)

Contexto: Multicast Delegates com Encadeamento de Funções (+ e -) no contexto de Delegates, Eventos, Action, Func e EventHandler.

Requisitos de Execução:

  1. Combinar múltiplos handlers em um único delegate executando ações em sequência.

Resultado Esperado

Multicast delegate executando cadeia de notificações.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_3_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Delegates, Eventos, Action, Func e EventHandler
🔑 Gabarito de Código & Solução Comentada
// MulticastDemo.cs
Action notificador = () => Console.WriteLine("1. Gravando log em disco...");
notificador += () => Console.WriteLine("2. Enviando webhook corporativo...");
notificador();

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

🏆 Nível 4: Desafio Corporativo

Problema 13.4 — Árvores de Expressão com Expression<Func<T, bool» para ORMs

Contexto: Árvores de Expressão com Expression<Func<T, bool» para ORMs no contexto de Delegates, Eventos, Action, Func e EventHandler.

Requisitos de Execução:

  1. Inspecionar árvore de expressão LINQ extraindo nomes de propriedades e operadores binários em tempo de execução.

Resultado Esperado

Árvore de expressão inspecionada para tradução em comandos SQL.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_13_4_SeuNome
  2. Envie na tarefa: Atividade Cap 13 - Delegates, Eventos, Action, Func e EventHandler
🔑 Gabarito de Código & Solução Comentada
// ExpressionTreeDemo.cs
using System.Linq.Expressions;

Expression<Func<int, bool>> exp = x => x > 10;
Console.WriteLine($"Tipo do corpo da expressao: {exp.Body.NodeType}");

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

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos