📊 Capítulo 11: Herança, Polimorfismo & Interfaces
Especialização em Sistemas com C#
🗺️ Polimorfismo Explícito no C#: virtual, override e new
flowchart TD
BASE["public class Funcionario {\n public virtual decimal CalcularBonus() => 1000m;\n}"]
--> DERIVED["public class Gerente : Funcionario {\n public override decimal CalcularBonus() => 3000m;\n}"]
CALL["Funcionario f = new Gerente();\nf.CalcularBonus();\n(Executa a versão do Gerente com despacho dinâmico polimórfico!) ⚡"]
DERIVED -.-> CALL
NEW_KEY["Se usar 'new' em vez de 'override', oculta o método da base sem polimorfismo!\nEvite o 'new' acidental! 🚨"]
DERIVED -.-> NEW_KEY
style BASE fill:#ede7f6,stroke:#512da8,stroke-width:2px
style DERIVED fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style CALL fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
style NEW_KEY fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
🎯 Slide 1: Classes Abstratas (abstract)
- Não podem ser instanciadas diretamente com
new. - Servem de modelo base com métodos abstratos que obrigam as subclasses a proverem uma implementação concreta.
🎯 Slide 2: Default Interface Methods (C# 8+)
public interface IRepositorio<T>
{
Task<T> ObterPorIdAsync(int id);
// Método padrão na interface:
Task<bool> ExisteAsync(int id) async => (await ObterPorIdAsync(id)) != null;
}
- Permite evoluir contratos de interfaces sem quebrar classes implementadoras existentes!
🎯 Slide 3: Palavra-Chave sealed
sealed class: Impede que a classe seja herdada por outras (otimiza chamadas virtuais via devirtualização do RyuJIT!).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim