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
using
em 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