As versões C# 9.0 e 10.0 foram lançadas junto com o .NET 5 e .NET 6, e marcaram um avanço significativo rumo a uma linguagem mais concisa, moderna e funcional, além de mais amigável para código limpo e manutenção.
Vamos explorar as principais inovações, com comparações práticas e quando usar cada uma.
🔷 C# 9.0 (2020) – O início da nova era imutável
Lançado com .NET 5, o C# 9 introduziu recursos que facilitaram a construção de modelos imutáveis, semântica por valor, redução de boilerplate e mais poder com padrões.
✅ Principais recursos
| Recurso | Descrição |
|---|---|
record types | Tipo por valor, ideal para dados imutáveis |
init-only setters | Inicialização de propriedades somente na criação |
top-level statements | Código sem a necessidade de Main() |
with-expressions | Clone de objetos imutáveis com alterações |
| Pattern Matching avançado | Combinação lógica (and, or, not, relacional) |
Target-typed new | Inferência de tipo no new() quando o tipo já é conhecido |
📌 Exemplos C# 9.0
✅ Record Type + with
public record Pessoa(string Nome, int Idade); var p1 = new Pessoa("Danilo", 32); var p2 = p1 with { Idade = 33 }; 📦 Ideal para Value Objects, DTOs, Events.
✅ Init-only Setters
public class Produto { public string Nome { get; init; } } 🔐 Traz imutabilidade sem perder clareza.
✅ Top-level statements
Console.WriteLine("Olá, mundo!"); 🧼 Remove o
static void Main, ótimo para apps pequenos, testes e scripts.
✅ Pattern Matching avançado
string ClassificarIdade(int idade) => idade switch { < 12 => "Criança", >= 12 and < 18 => "Adolescente", _ => "Adulto" }; 🔷 C# 10.0 (2021) – Produtividade e organização moderna
Lançado com o .NET 6, o C# 10.0 foca em organização de código, produtividade do desenvolvedor e melhorias na legibilidade.
✅ Principais recursos
| Recurso | Descrição |
|---|---|
global using | Usings globais aplicados a todo o projeto |
file-scoped namespace | Remove indentação com namespace |
record struct | Combina performance de struct com imutabilidade de record |
| Melhoria em padrões | Mais poder em pattern matching com propriedades e lógica |
| Lambdas mais flexíveis | Lambdas agora suportam atributos, tipos explícitos, natural types |
| Constantes interpoladas | Strings interpoladas com const |
📌 Exemplos C# 10.0
✅ Global Usings
// Em um arquivo GlobalUsings.cs global using System; global using System.Collections.Generic; 📦 Evita repetição de
usingem múltiplos arquivos.
✅ File-scoped namespace
namespace MinhaApp.Models; public class Produto { } 📂 Remove indentação extra, deixando o código mais limpo.
✅ Record Struct
public readonly record struct Ponto(int X, int Y); 🚀 Alta performance + imutabilidade: ótimo para estruturas em memória ou gráficos.
✅ Lambda com tipo e atributos
Func<int, int> quadrado = [Obsolete] (int x) => x * x; 🔍 Mais poder para lambdas, inclusive com atributos e tipos explícitos.
✅ Const interpolated strings
const string nome = "Danilo"; const string saudacao = $"Olá, {nome}"; // agora é permitido! 📊 Comparativo – C# 9.0 vs C# 10.0
| Funcionalidade | C# 9.0 | C# 10.0 |
|---|---|---|
record | ✅ | ✅ |
record struct | ❌ | ✅ |
init-only setters | ✅ | ✅ |
top-level statements | ✅ | ✅ |
global using | ❌ | ✅ |
file-scoped namespace | ❌ | ✅ |
| Lambdas com atributos | ❌ | ✅ |
| Pattern matching relacional | ✅ | ✅ |
| Constantes com interpolação | ❌ | ✅ |
🎯 Quando usar C# 9 ou C# 10?
| Cenário | Use C# 9.0 | Use C# 10.0 |
|---|---|---|
| DDD, Event Sourcing, modelagem imutável | ✅ record, init | ✅ record struct também |
| Aplicações simples e scripts | ✅ top-level statements | ✅ + file-scoped namespace |
| Bibliotecas ou SDKs com arquitetura limpa | ✅ init + record | ✅ global using + record struct |
| Projetos com múltiplos arquivos repetitivos | ❌ | ✅ global using, namespace |
| Performance com legibilidade moderna | ⚠️ | ✅ record struct, lambda |
⚙️ Como ativar?
No seu arquivo .csproj:
<LangVersion>10.0</LangVersion> Ou para sempre usar a mais recente:
<LangVersion>latest</LangVersion> 🧠 Conclusão
C# 9.0 e 10.0 representam um salto real de produtividade e clareza na forma como escrevemos software moderno em .NET:
- C# 9.0 trouxe immutabilidade e semântica por valor (
record,init,with) - C# 10.0 elevou a produtividade e organização (
global using,record struct, lambdas mais poderosas)
✨ Se você está com .NET 6 ou superior, C# 10.0 é altamente recomendado para novos projetos.
🤝 Conecte-se Comigo
Se você está construindo aplicações modernas, APIs limpas ou quer dominar arquitetura em .NET, bora trocar ideia:
- ✍️ Medium
- 📬 contato@dopme.io
Top comments (0)