O C# continua evoluindo com equilíbrio entre clareza, poder expressivo e produtividade para aplicações modernas. Enquanto o C# 11 consolidou avanços como tipos exigidos e listas padronizadas, o C# 12 mergulha em construtores primários, expressões de coleção e alias genéricos que simplificam ainda mais o dia a dia de desenvolvimento.
🔷 C# 11.0 (2022) – Reforçando expressividade e segurança
Lançado junto com o .NET 7, o C# 11 focou em tornar a linguagem mais consistente, segura e com sintaxe expressiva para estruturas complexas.
✅ Principais Recursos
Recurso | Descrição |
---|---|
raw string literals |
Strings multilinha e sem escapes |
list patterns |
Pattern matching com listas/arrays |
required members |
Propriedades obrigatórias na construção |
generic math |
Suporte a operadores matemáticos genéricos (INumber<T> ) |
UTF-8 string literals |
String literal com codificação u8 para performance |
📌 Exemplos práticos — C# 11
1️⃣ Raw String Literals
var json = """
{
"nome": "Danilo",
"idade": 33
}
""";
✍️ Ideal para trabalhar com JSON, XML, scripts e SQL sem
\n
,\"
, etc.
2️⃣ List Patterns
int[] numeros = [1, 2, 3];
var resultado = numeros switch
{
[1, 2, ..] => "Começa com 1 e 2",
[.., 3] => "Termina com 3",
_ => "Outro padrão"
};
🔍 Excelente para comandos, pipelines e transformações com coleções.
3️⃣ Required Members
public class Produto
{
public required string Nome { get; init; }
}
// Obrigatório informar `Nome` na criação
var p = new Produto { Nome = "Teclado" };
✅ Traz segurança no modelo, útil em DDD e validação automática de objetos.
4️⃣ Generic Math
static T Somar<T>(T a, T b) where T : INumber<T>
=> a + b;
📊 Agora é possível criar bibliotecas de álgebra, física e finanças com tipos genéricos.
5️⃣ UTF-8 String Literals
ReadOnlySpan<byte> saudacao = "Olá!"u8;
⚡ Alta performance em sistemas de baixo nível, APIs binárias, interoperabilidade.
🔶 C# 12.0 (2023) – Mais clareza, menos repetição
Lançado junto ao .NET 8, o C# 12 traz recursos altamente desejados pela comunidade, voltados a limpeza de código, expressividade funcional e legibilidade moderna.
✅ Principais Recursos
Recurso | Descrição |
---|---|
Primary Constructors em classes | Construtor direto na declaração da classe (como em records) |
Collection Expressions | Inicialização de coleções com sintaxe simplificada ([1, 2, 3] ) |
Using Aliases com tipos genéricos | Agora é possível criar alias com tipos genéricos (ex: MyList<T> ) |
Interpolated string handlers | Melhoria na performance de interpolação |
Ref readonly parameters aprimorados | Mais segurança com valores por referência |
📌 Exemplos práticos — C# 12
1️⃣ Primary Constructors para classes
public class Produto(string nome, decimal preco)
{
public string Nome { get; } = nome;
public decimal Preco { get; } = preco;
}
🧼 Ideal para modelar entidades e DTOs com menos código repetido.
2️⃣ Collection Expressions
int[] numeros = [1, 2, 3];
List<string> nomes = ["Ana", "João", "Danilo"];
✨ Código mais limpo, estilo F#/JavaScript.
3️⃣ Using Aliases com tipos genéricos
using ListaInt = System.Collections.Generic.List<int>;
using MeuDicionario<TKey, TValue> = System.Collections.Generic.Dictionary<TKey, TValue>;
ListaInt numeros = new() { 1, 2, 3 };
MeuDicionario<string, int> estoque = new();
🧠 Traz mais clareza para projetos com muitos tipos complexos repetitivos.
4️⃣ Interpolated String Handlers (otimizado)
logger.LogDebug($"Valor = {valor}, Status = {status}");
🔬 Em tempo de compilação, isso é convertido para uso mais eficiente de memória e performance.
⚖️ Comparativo C# 11 vs C# 12
Funcionalidade | C# 11.0 | C# 12.0 |
---|---|---|
Raw string literals | ✅ | ✅ |
List patterns | ✅ | ✅ |
Required members | ✅ | ✅ |
Generic math | ✅ | ✅ |
UTF-8 string literals | ✅ | ✅ |
Primary constructors (em classes) | ❌ | ✅ |
Collection expressions | ❌ | ✅ |
Using alias com genéricos | ❌ | ✅ |
Interpolated string handler | ⚠️ parcial | ✅ total |
🎯 Quando usar cada versão?
Cenário | Use C# 11.0 | Use C# 12.0 |
---|---|---|
Segurança na inicialização de objetos | ✅ Required | ✅ Required + Primary Constructor |
Manipulação de texto estruturado | ✅ Raw Strings | ✅ Também |
Operações matemáticas genéricas | ✅ Generic Math | ✅ |
Criação rápida de modelos | ❌ | ✅ Primary Constructors |
Inicialização elegante de listas | ❌ | ✅ Collection Expressions |
Código limpo e menos repetitivo | ⚠️ | ✅ Total |
⚙️ Como ativar C# 12
No .csproj
:
<LangVersion>12.0</LangVersion>
Ou:
<LangVersion>latest</LangVersion>
⚠️ Requer .NET 8 ou superior.
🧠 Conclusão
C# 11 e 12 consolidam o C# como uma das linguagens mais modernas do ecossistema corporativo, com foco em:
- ✨ Clareza
- ✅ Segurança de dados
- 🧬 Imutabilidade e expressividade funcional
- ⚡ Performance de baixo nível quando necessário
Se você está usando .NET 7 ou 8, adotar o C# 12 trará benefícios diretos à produtividade e qualidade do código.
🤝 Conecte-se Comigo
Se você está estudando C#, arquitetura moderna ou práticas de design .NET, vamos trocar ideias:
- ✍️ Medium
- 📬 contato@dopme.io
Top comments (0)