Enquanto o C# 10 modernizou a organização e concisão do código, o C# 11 foi mais fundo, permitindo modelagem mais expressiva, validação obrigatória de membros, uso funcional com listas e operações genéricas com matemática nativa.
🔷 Recap: O que trouxe o C# 10.0 (2021)
Lançado junto com o .NET 6, o C# 10 se destacou pela simplificação da sintaxe e organização do código.
✅ Principais recursos do C# 10.0
Recurso | Descrição |
---|---|
global using |
Usings únicos para todo o projeto |
file-scoped namespace |
Namespace de escopo por arquivo, reduzindo indentação |
record struct |
Structs imutáveis com semântica de valor |
Lambdas com atributos | Agora podem ter tipos explícitos, atributos e inferência melhor |
Melhoria em pattern matching | Mais expressivo e relacional (is , or , and ) |
Constantes interpoladas |
const string com interpolação |
📌 Exemplos C# 10
✅ Global Usings
// Arquivo GlobalUsings.cs
global using System;
global using MyApp.Shared;
✅ File-scoped Namespace
namespace MyApp.Models;
public class Produto { }
✅ Record Struct
public readonly record struct Coordenada(int X, int Y);
🧠 Alta performance com semântica imutável, ideal para modelos leves.
🔶 O que trouxe o C# 11.0 (2022)
Lançado com o .NET 7, o C# 11 é uma das versões mais “ergonômicas” da linguagem, com foco em multiplataforma, interoperabilidade e experiência de desenvolvedor.
✅ Principais recursos do C# 11.0
Recurso | Descrição |
---|---|
raw string literals |
Strings multilinha e literais sem escapes (""" ) |
list patterns |
Pattern matching com arrays e listas ([1, 2, ..] ) |
required members |
Exige que propriedades sejam inicializadas na construção |
generic math |
Interfaces matemáticas genéricas (ex: T : INumber<T> ) |
UTF-8 string literals | Prefixo u8 para string em UTF-8, útil em performance e interoperabilidade |
📌 Exemplos C# 11
✅ Raw String Literals
var json = """
{
"nome": "Danilo",
"idade": 30
}
""";
✍️ Ideal para JSON, XML, SQL, scripts em geral.
✅ List Patterns
int[] numeros = [1, 2, 3, 4];
var resultado = numeros switch
{
[1, 2, ..] => "Começa com 1 e 2",
[.., 4] => "Termina com 4",
_ => "Outro"
};
🧠 Poderoso para validações, matching de comandos, manipulação de buffers.
✅ Required Members
public class Cliente
{
public required string Nome { get; init; }
public int Idade { get; init; }
}
// Agora obrigatório:
var c = new Cliente { Nome = "Danilo", Idade = 30 };
🚨 Evita objetos incompletos na modelagem de domínio (ótimo para DDD).
✅ Generic Math
static T Somar<T>(T a, T b) where T : INumber<T>
{
return a + b;
}
var resultado = Somar(5, 10); // int, double, decimal — tudo funciona
🔢 Genérico, expressivo e seguro — muito útil para bibliotecas matemáticas, DSLs e engines.
✅ UTF-8 String Literals
ReadOnlySpan<byte> saudacao = "Olá, mundo!"u8;
⚡ Ótimo para desempenho e interoperabilidade com C/C++, APIs nativas, ou serializações.
⚖️ Comparativo – C# 10 vs C# 11
Funcionalidade | C# 10.0 | C# 11.0 |
---|---|---|
global using |
✅ | ✅ |
file-scoped namespace |
✅ | ✅ |
record struct |
✅ | ✅ |
Lambdas com atributos | ✅ | ✅ |
Raw string literals | ❌ | ✅ |
List patterns | ❌ | ✅ |
required members |
❌ | ✅ |
Generic Math (INumber<T> ) |
❌ | ✅ |
UTF-8 string literals (u8 ) |
❌ | ✅ |
🎯 Quando usar C# 10 ou C# 11?
Cenário | Use C# 10.0 | Use C# 11.0 |
---|---|---|
Organização de projeto e produtividade | ✅ Global Usings, Namespaces | ✅ Também aplicável |
Imutabilidade e modelagem rica (record struct) | ✅ | ✅ + Required Members |
Manipulação de dados/texto multilinha | ❌ | ✅ Raw string literals |
Algoritmos genéricos com operadores | ❌ | ✅ Generic Math |
APIs de baixo nível e interoperabilidade | ⚠️ | ✅ UTF-8 strings, performance |
⚙️ Como ativar
No .csproj
do projeto:
<LangVersion>11.0</LangVersion>
Ou use:
<LangVersion>latest</LangVersion>
🧠 Conclusão
As versões C# 10 e C# 11 representam um salto significativo na expressividade da linguagem e segurança de modelo:
- C# 10 = mais organização, menos boilerplate.
- C# 11 = mais poder em expressões, validações obrigatórias, uso matemático genérico e strings multiuso.
💡 Se você está usando .NET 7 ou .NET 8, usar C# 11 é altamente recomendado — especialmente em sistemas modernos, APIs limpas, DSLs e aplicações performáticas.
🤝 Conecte-se Comigo
Se você trabalha com .NET moderno e está evoluindo seu stack com C#, arquitetura e boas práticas, vamos trocar ideias:
- ✍️ Medium
- 📬 contato@dopme.io