.NET
10 - Visão geral da nova versão .NET
![]() |
Neste artigo vou apresentar um resumo das novidades do .NET 10 previsto para novembro/2025.(Esta é um republicação de partes de outros artigos da Microsoft sobre o .NET 10) |
Quando uma versão de suporte de longo prazo (LTS) do .NET é lançada, todo o ecossistema presta atenção. As empresas buscam estabilidade. Os desenvolvedores buscam produtividade e desempenho. Com o .NET 10, vamos obter ambos os benefícios.
Em comparação com as versões de curto prazo como o .NET 9, o
.NET 10 consolida melhorias em uma versão que as equipes usarão por anos. Ele
aprimora o desempenho do runtime, otimiza as ferramentas diárias, moderniza a
linguagem com o C# 14 e fornece atualizações significativas de recursos para
frameworks como ASP.NET Core e EF Core.
Esta não é apenas "mais uma
atualização anual". É um lançamento que faz o .NET parecer mais poderoso —
e mais agradável — para a construção de aplicativos modernos.
Tempo de execução + Native AOT: Velocidade que você pode sentir
O desempenho é sempre um destaque, e o .NET 10 entrega isso de forma inteligente.
Otimizações JIT mais inteligentes
Melhorias no inlining reduzem a sobrecarga de chamadas.
A inversão de loop otimiza o desempenho
em loops de alta frequência.
A desvirtualização de arrays remove
buscas extras ao iterar sobre arrays.
Essas
mudanças se somam, tornando caminhos críticos mais rápidos sem precisar de
alterações no código.
Melhorias no Native AOT
O
Native AOT compila aplicativos de forma antecipada, reduzindo o tempo de
inicialização e o uso de memória.
Quando usá-lo?
Microsserviços → inicializações mais rápidas no Kubernetes.
Serverless → menor latência na primeira requisição.
Ferramentas de linha de comando (CLI) → execução ágil e tamanho menor.
Exemplo de Benchmark (Hello World)
JIT:
inicialização de ~120ms, ~15MB de memória.
Native AOT:
inicialização de ~40ms, ~8MB de memória.
Isso não é teórico — podemos
sentir que ficou mais rápido...
Ferramentas do SDK: Ferramentas de uma só vez e CLI mais inteligente
Os desenvolvedores passam muito tempo na linha de comando. O .NET 10 torna esse
tempo mais produtivo.
Execução de ferramenta de uma só vez
Antes do .NET 10, executar uma ferramenta exigia:
dotnet tool install -g dotnet-format
(instalar dotnet-format) dotnet format (executar) |
Agora com o dnx ( .NET Execution Environment) podemos fazer assim:
dnx dotnet-format -- --check |
Sem instalação. Sem limpeza. Perfeito para pipelines de CI/CD (integração contínua e entrega contínua).
Além disso, agora podemos perguntar ao CLI sobre si mesmo:
dotnet build --cli-schema json |
Isso retorna um JSON estruturado com as opções disponíveis, permitindo que IDEs e shells ofereçam autocompletar e automação mais avançados.
Agora podemos executar um único arquivo:
dotnet run OlaMundo.cs |
Ou publicá-lo com o Native AOT para distribuição. Isso é como o "npx para .NET"
C# 14: Pequenos recursos, grande satisfação
O C# continua a evoluir com pequenos recursos que eliminam atritos.
Membros de extensão
O C# 14 permite estender não
apenas métodos, mas também propriedades, operadores e até métodos estáticos.
Isso permite criar APIs mais fluentes e expressivas. Por exemplo, você pode
adicionar uma propriedade de extensão a uma classe sem alterar o código
original, como no exemplo:
public
static int Sum(this IEnumerable<int> values) => values.Sum();
Isso torna a descoberta de APIs mais fácil e o código mais limpo.
Em vez de preencher o código com classes estáticas de ajuda, estendemos os tipos diretamente:
extension
PedidoExtensions { public decimal ImpostoTotal(Pedido o) => o.Total * 1.1m; } |
APIs mais limpas e fáceis de descobrir.
Propriedades com campos de apoio
Não precisamos mais de
código verboso para personalizar propriedades automáticas:
public string Nome { get => field; set => field = value?.Trim() ?? ""; } |
A palavra-chave field referencia o campo de apoio automaticamente
Atribuição condicional de nulo
Atualizar com segurança
costumava ser complicado:
if (pessoa?.Placar != null) pessoa.Placar += 10; |
Agora:
pessoa?.Placar += 10; |
Mais simples e legível.
Conversões de Span
Trabalhar com
fatias de memória agora é ainda mais suave, com conversões implícitas de/para
Span<T>. Ótimo para código sensível ao desempenho
Melhorias nas lambdas
Além disso as Funções lambda se tornaram ainda mais flexíveis com a introdução de parâmetros opcionais. Antes, todos os parâmetros de uma lambda precisavam ser obrigatórios.
Agora, você pode definir valores padrão, como em
: Func<int, int, int> add = (x, y = 1) => x +
y;
Isso reduz a sobrecarga e permite que você crie lambdas mais genéricas para casos de uso simples.
Params Collections
Antes, o modificador params só funcionava com arrays. Isso significava que se você quisesse passar uma lista de itens, precisava convertê-la para um array primeiro, o que criava uma alocação de memória desnecessária.
Agora, você pode usar params com qualquer tipo de coleção,
como List<T>, IEnumerable<T>, etc. Isso reduz alocações e torna o código mais
flexível.
Antes: void Log(params string[] messages);
Agora: void Log(params List<string> messages);
ASP.NET Core: Padrões
modernos
Os aplicativos web receberam
um grande impulso.
Suporte a OpenAPI 3.1
As APIs
mínimas agora podem gerar documentação OpenAPI 3.1, incluindo
YAML.
builder.Services.AddOpenApi(); app.MapOpenApi(); |
Equipes que trabalham com o conceito de "API-first" podem integrar-se instantaneamente com ferramentas como Stoplight ou Postman.
Server-Sent Events (SSE)
Atualizações em tempo real sem WebSockets agora são nativas:
app.MapGet("/events", () => Results.ServerSentEvents(async channel => { await channel.SendEventAsync("ready"); await channel.SendEventAsync("update", "Order processed"); })); |
O envio de atualizações por streaming se torna uma única linha de código.
Identidade com chaves de acesso (Passkeys)
De forma nativa, a ASP.NET Identity agora suporta
chaves de acesso (WebAuthn). Aplicativos sem senha são mais
fáceis do que nunca.
Melhorias no Blazor
<LinkPreload /> para carregamentos de
página mais rápidos.
Builds amigáveis para bundlers como Webpack/Rollup.
Melhor validação e experiência de
reconexão.
Tudo isso torna o ASP.NET Core mais moderno por padrão.
EF Core 10: Recursos
reais para aplicativos reais
O Entity
Framework Core continua a diminuir a lacuna entre o LINQ e o SQL.
Filtros de consulta nomeados
Podemos alternar filtros
por nome — útil para soft deletes ou multi-tenancy.
builder.Entity<Order>() .HasQueryFilter("IsActive", o => !o.IsDeleted); |
Mais tarde, podemos desativá-lo:
context.IgnoreQueryFilters("IsActive"); |
LINQ LeftJoin / RightJoin
Antes do
EF Core 10, escrever um left join significava lidar com
join ... into mais DefaultIfEmpty(). Funcionava, mas
não era óbvio para novos leitores o que estava acontecendo.
Agora, o EF
Core 10 nos dá operadores de primeira classe:
Exemplo de Left
Join:
var query = context.Customers .LeftJoin( context.Orders, c => c.Id, o => o.CustomerId, (c, o) => new { c.Name, OrderId = o != null ? o.Id : (int?)null } ) .ToList(); |
Exemplo de Right Join:
var query = context.Orders .RightJoin( context.Customers, o => o.CustomerId, c => c.Id, (o, c) => new { CustomerName = c?.Name, OrderId = o.Id } ) .ToList(); |
Esses novos operadores são:
Mais claros →
O tipo de junção é explícito.
Menos "código de uso geral"
→ Não há into ou DefaultIfEmpty().
Mais seguros → Mais fáceis de manter e menos propensos a erros.
Pesquisa híbrida no Cosmos DB
O EF
Core 10 também adiciona pesquisa vetorial combinada com pesquisa de texto
completo no Cosmos DB. Isso significa que podemos executar buscas semânticas e
por palavra-chave juntas, permitindo consultas no estilo de IA dentro de nossa
camada de dados.
var results = await context.Products .Where(p => p.Description.Contains("camera")) .OrderByVector(p => p.Embedding, queryVector) .ToListAsync(); |
O que atualizar primeiro?
O .NET
10 é grande, mas não precisamos adotar tudo de uma vez.
SDK + Ferramentas → Aumento de
produtividade sem riscos.
ASP.NET Core → Obtenha OpenAPI 3.1 e SSE
imediatamente.
EF Core 10 → Use filtros nomeados para consultas mais limpas.
AOT → Comece com utilitários ou
microsserviços.
C# 14 → Introduza gradualmente em novos módulos.
Desta forma,
etapa por etapa, modernizamos com segurança.
Com
isso temos que o .NET 10 não é apenas mais um lançamento anual. É uma
atualização de plataforma que torna os aplicativos mais rápidos, as ferramentas
mais fluidas, as APIs mais limpas e os bancos de dados mais inteligentes.
Obtemos benefícios imediatos — inicialização mais curta, CLI mais simples,
código C# expressivo e padrões web modernos. E também ganhamos estabilidade de
longo prazo como uma versão LTS.
E estamos conversados...
"E, como eles não se importaram de ter conhecimento de
Deus, assim Deus os entregou a um sentimento perverso, para fazerem coisas que
não convêm;"
Romanos 1:28
Referências:
NET - Unit of Work - Padrão Unidade de ...