📊 Capítulo 13: Delegates, Eventos & Actions
Especialização em Sistemas com C#
🗺️ O Mecanismo Multicast de Delegates e Eventos em C#
flowchart TD
EVENT["public event EventHandler<PedidoCriadoEventArgs> AoCriarPedido;"]
--> SUB1["assinante1.EnviarEmailConfirmacao(sender, e)"]
EVENT --> SUB2["assinante2.AtualizarEstoque(sender, e)"]
EVENT --> SUB3["assinante3.DispararFaturamento(sender, e)"]
NOTE["MulticastDelegate: Invoca todos os métodos inscritos em cadeia (+ e -)!\nO modificador 'event' impede que assinantes externos invoquem ou sobrescrevam a lista de inscritos! 🛡️"]
EVENT -.-> NOTE
style EVENT fill:#ede7f6,stroke:#512da8,stroke-width:2px
style SUB1 fill:#e8f5e9,stroke:#4caf50,stroke-width:1.5px
style SUB2 fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style SUB3 fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style NOTE fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
🎯 Slide 1: Action<T> vs Func<T, R>
Action<...>: Representa um método que não retorna nada (void).-
Action<string>recebe uma string e não retorna nada.
-
Func<..., TResult>: Representa um método que retorna um valor. O último tipo genérico é sempre o retorno!Func<int, int, decimal>recebe dois inteiros e retorna um decimal.
🎯 Slide 2: Invocação Segura com ?.Invoke()
// Dispara o evento de forma thread-safe apenas se houver algum assinante:
AoCriarPedido?.Invoke(this, new PedidoCriadoEventArgs(pedidoId));
🎯 Slide 3: Desinscrever é Obrigatório!
- Esquecer de desinscrever eventos (
-=) mantém referências vivas para objetos ouvintes no Heap, impedindo o Garbage Collector de coletá-los e gerando Memory Leaks silenciosos!
🔗 Navegação do Capítulo 13
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim