A Orientação a Objetos (OO) ainda é a espinha dorsal do desenvolvimento backend em .NET, mesmo com a ascensão de paradigmas funcionais. Com o C# moderno, conseguimos aplicar os pilares da OO com mais produtividade, segurança e clareza.
Este artigo mostra como usar os conceitos clássicos de OO (como encapsulamento, herança e polimorfismo) em conjunto com os recursos modernos do C#, como:
-
record
,record struct
-
required
,init
-
sealed
,abstract
,virtual
-
with
expressions file-scoped namespace
-
primary constructors
(C# 12)
🧱 1. Encapsulamento com init
e required
public class Cliente
{
public required string Nome { get; init; }
public required string Email { get; init; }
public DateTime CriadoEm { get; } = DateTime.UtcNow;
}
-
init
garante imutabilidade após construção. -
required
obriga inicialização, evitandonull
em tempo de compilação.
🧠 2. Abstração com Interfaces e Polimorfismo
public interface INotificacaoService
{
void Enviar(string mensagem);
}
public class EmailService : INotificacaoService
{
public void Enviar(string mensagem)
=> Console.WriteLine($"Email enviado: {mensagem}");
}
- Código desacoplado e testável via Dependency Injection.
- OO moderna + SOLID com
interface segregation
.
🧬 3. Herança com sealed
, abstract
e override
public abstract class Funcionario
{
public abstract decimal CalcularSalario();
}
public sealed class Desenvolvedor : Funcionario
{
public override decimal CalcularSalario() => 8000;
}
-
abstract
força a implementação. -
sealed
impede herança indesejada.
🧾 4. Usando record
para Modelos Imutáveis
public record Produto(string Nome, decimal Preco);
- Ideal para DDD, eventos, DTOs.
- Com
with
:
var novo = produto with { Preco = 99.90M };
🧰 5. OO com Primary Constructors (C# 12)
public class Pedido(int numero, Cliente cliente)
{
public void Confirmar() => Console.WriteLine($"Pedido {numero} confirmado.");
}
- Remove boilerplate de propriedades privadas + construtor.
- Ideal em microservices, entidades ou use cases simples.
✅ Conclusão
A OO continua poderosa, e com os recursos do .NET moderno, conseguimos aplicá-la com mais elegância e menos código repetitivo. Invista em:
-
record
para imutabilidade -
required
para segurança -
init
para imutabilidade controlada -
sealed
para integridade arquitetural
🤝 Conecte-se Comigo
Se você trabalha com .NET moderno e quer dominar arquitetura, C#, DevOps ou interoperabilidade, vamos conversar:
- ✍️ Medium
- 🌐 shifters.dev
- 📬 contato@dopme.io
Top comments (0)