DEV Community

Cover image for De C# 11 a C# 12 — Aprofundando a linguagem com expressividade e produtividade
Danilo O. Pinheiro, dopme.io
Danilo O. Pinheiro, dopme.io

Posted on

De C# 11 a C# 12 — Aprofundando a linguagem com expressividade e produtividade

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
}
""";
Enter fullscreen mode Exit fullscreen mode

✍️ 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"
};
Enter fullscreen mode Exit fullscreen mode

🔍 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" };
Enter fullscreen mode Exit fullscreen mode

✅ 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;
Enter fullscreen mode Exit fullscreen mode

📊 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;
Enter fullscreen mode Exit fullscreen mode

⚡ 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;
}
Enter fullscreen mode Exit fullscreen mode

🧼 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"];
Enter fullscreen mode Exit fullscreen mode

✨ 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();
Enter fullscreen mode Exit fullscreen mode

🧠 Traz mais clareza para projetos com muitos tipos complexos repetitivos.


4️⃣ Interpolated String Handlers (otimizado)

logger.LogDebug($"Valor = {valor}, Status = {status}");
Enter fullscreen mode Exit fullscreen mode

🔬 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>
Enter fullscreen mode Exit fullscreen mode

Ou:

<LangVersion>latest</LangVersion>
Enter fullscreen mode Exit fullscreen mode

⚠️ 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:

Top comments (0)