De C# 9.0 a C# 10.0 — Imutabilidade, Expressividade e Produtividade no .NET moderno
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# 9.0 a C# 10.0 — Imutabilidade, Expressividade e Produtividade no .NET moderno

Publish Date: Jul 11
0 0

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

📦 Ideal para Value Objects, DTOs, Events.


✅ Init-only Setters

public class Produto
{
    public string Nome { get; init; }
}
Enter fullscreen mode Exit fullscreen mode

🔐 Traz imutabilidade sem perder clareza.


✅ Top-level statements

Console.WriteLine("Olá, mundo!");
Enter fullscreen mode Exit fullscreen mode

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

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

📦 Evita repetição de using em múltiplos arquivos.


✅ File-scoped namespace

namespace MinhaApp.Models;

public class Produto { }
Enter fullscreen mode Exit fullscreen mode

📂 Remove indentação extra, deixando o código mais limpo.


✅ Record Struct

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

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

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

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

Ou para sempre usar a mais recente:

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

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

Comments 0 total

    Add comment