📊 Capítulo 09: Classes & Construtores C# 12
Especialização em Sistemas com C#
🗺️ A Revolução dos Construtores Primários (Primary Constructors no C# 12)
flowchart TD
subgraph LEGACY ["Classe Tradicional (C# Legado - Boilerplate Repetitivo)"]
L1["public class ServicoEmail {\n private readonly ILogger _logger;\n private readonly ISmtpClient _client;\n public ServicoEmail(ILogger logger, ISmtpClient client) {\n _logger = logger;\n _client = client;\n }\n} 🚨"]
end
subgraph NOVO ["Primary Constructor no C# 12 (Direto e Elegante)"]
N1["public class ServicoEmail(ILogger logger, ISmtpClient client) {\n // 'logger' e 'client' estão disponíveis em todo o corpo da classe!\n // Zero campos privados redundantes declarados à mão! ⚡\n}"]
end
LEGACY -.-> |"C# 12"| NOVO
style LEGACY fill:#ffebee,stroke:#d32f2f,stroke-width:2px
style NOVO fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: Propriedades Auto-Implementadas
public class ContaBancaria
{
public string Numero { get; init; } // 'init' permite atribuir apenas na inicialização!
public string Titular { get; set; }
public decimal Saldo { get; private set; } // Leitura pública, alteração restrita!
public void Depositar(decimal valor)
{
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(valor);
Saldo += valor;
}
}
🎯 Slide 2: Modificador required (C# 11+)
public required string Email { get; init; }- Força o chamador a inicializar a propriedade na criação do objeto (
new Usuario { Email = "..." }), prevenindo esquecimentos de campos obrigatórios!
🎯 Slide 3: Métodos de Expressão em Linha (Expression-Bodied)
public decimal TotalComImposto => Saldo * 1.15m;- Sintaxe limpa para propriedades calculadas sem blocos
{ get { return ...; } }.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim