De C# 10.0 a C# 11.0 — Produtividade, padrões poderosos e novas formas de expressar código limpo
Danilo O. Pinheiro, dopme.io

Danilo O. Pinheiro, dopme.io @daniloopinheiro

About: Inicie em tecnologia por volta de 2017. Neste percurso, com experiencia em desenvolvimento web em .NET e outras tecnologias. Com algumas certificações, e fundador da DevsFree.

Location:
Brasil
Joined:
Jul 22, 2020

De C# 10.0 a C# 11.0 — Produtividade, padrões poderosos e novas formas de expressar código limpo

Publish Date: Jul 11
0 0

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

✅ File-scoped Namespace

namespace MyApp.Models;

public class Produto { }
Enter fullscreen mode Exit fullscreen mode

✅ Record Struct

public readonly record struct Coordenada(int X, int Y);
Enter fullscreen mode Exit fullscreen mode

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

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

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

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

🔢 Genérico, expressivo e seguro — muito útil para bibliotecas matemáticas, DSLs e engines.


✅ UTF-8 String Literals

ReadOnlySpan<byte> saudacao = "Olá, mundo!"u8;
Enter fullscreen mode Exit fullscreen mode

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

Ou use:

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

🧠 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:

Comments 0 total

    Add comment