O que C# 4.0 não tem que C# 5.0 trouxe?
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

O que C# 4.0 não tem que C# 5.0 trouxe?

Publish Date: Jun 27
0 1

A linguagem C# evolui constantemente para acompanhar as necessidades modernas de desenvolvimento. As versões 4.0 (2010) e 5.0 (2012) marcaram um grande salto em termos de flexibilidade na linguagem e suporte assíncrono moderno.

Neste artigo, vamos entender o que foi introduzido em cada versão, com foco prático e contextual, incluindo exemplos e aplicações reais.


🧪 C# 4.0 (2010) – Flexibilidade com dynamic, parâmetros opcionais e co/contravariância

Lançado junto com o .NET Framework 4.0, o C# 4.0 focou em interoperabilidade, principalmente com bibliotecas COM (como Office), além de melhorias em generics e legibilidade de métodos.

🚀 Novos recursos da linguagem

Recurso Descrição
dynamic Tipagem dinâmica com resolução em tempo de execução
Parâmetros opcionais Permite definir valores padrão nos métodos
Parâmetros nomeados Permite chamar argumentos fora da ordem, nomeando-os
Covariância e contravariância Flexibiliza uso de interfaces genéricas entre tipos relacionados

🧠 1. Tipagem dinâmica com dynamic

Permite adiar a verificação de tipo para o tempo de execução. Ideal para interoperar com COM (ex: Office), JSON ou APIs dinâmicas.

dynamic pessoa = new { Nome = "Ana", Idade = 30 };
Console.WriteLine(pessoa.Nome); // OK em runtime
Enter fullscreen mode Exit fullscreen mode

❗ Erros com dynamic só são descobertos em tempo de execução.


🧠 2. Parâmetros opcionais e nomeados

Reduz a necessidade de múltiplas sobrecargas e torna chamadas mais legíveis.

void EnviarEmail(string para, string assunto = "Sem Assunto", string corpo = "")
{
    // ...
}

EnviarEmail("ana@exemplo.com", corpo: "Olá!"); // Argumento nomeado + opcional
Enter fullscreen mode Exit fullscreen mode

🧠 3. Covariância e Contravariância

Permite maior compatibilidade com tipos genéricos relacionados.

Covariância (out)

IEnumerable<string> nomes = new List<string>();
IEnumerable<object> objetos = nomes; // Funciona no C# 4.0+
Enter fullscreen mode Exit fullscreen mode

Contravariância (in)

Action<object> objAction = s => Console.WriteLine(s);
Action<string> strAction = objAction; // Funciona no C# 4.0+
Enter fullscreen mode Exit fullscreen mode

🔧 Muito útil em APIs genéricas, como LINQ, eventos, coleções.


🧪 C# 5.0 (2012) – Revolução assíncrona com async / await

Lançado com o .NET Framework 4.5, o C# 5.0 trouxe suporte completo ao modelo assíncrono baseado em tarefas (Task) com as palavras-chave async e await.

Esse modelo substituiu o padrão de callbacks e eventos, tornando a programação assíncrona muito mais simples e legível.


🚀 Novos recursos da linguagem

Recurso Descrição
async Marca um método como assíncrono
await Espera pela finalização de uma Task sem bloquear a thread
State machine O compilador gera máquina de estados para manter contexto

📌 Exemplo antes do C# 5.0 (Callback hell)

WebClient client = new WebClient();
client.DownloadStringCompleted += (s, e) =>
{
    Console.WriteLine(e.Result);
};
client.DownloadStringAsync(new Uri("https://exemplo.com"));
Enter fullscreen mode Exit fullscreen mode

✅ Exemplo com C# 5.0 (async/await)

public async Task<string> ObterConteudoAsync(string url)
{
    using var client = new HttpClient();
    var resultado = await client.GetStringAsync(url);
    return resultado;
}
Enter fullscreen mode Exit fullscreen mode

🔄 Isso tornou o código assíncrono mais parecido com código síncrono, mas sem travar a thread principal.


⚙️ Vantagens do async/await

  • Código mais limpo e fácil de ler
  • Melhor performance em apps web (ex: ASP.NET)
  • Evita Thread.Sleep, BeginInvoke, ContinueWith
  • Base para APIs modernas (HttpClient, EF Core, etc.)

📊 Comparativo Rápido

Recurso C# 4.0 C# 5.0
dynamic
Parâmetros nomeados
Parâmetros opcionais
Co/contravariância
async/await
Programação assíncrona moderna

👨‍💻 Quando usar C# 4.0 ou 5.0?

  • C# 4.0: quando precisa interoperar com Office, COM, automação, dinamismo
  • C# 5.0: quando sua aplicação depende fortemente de chamadas IO-bound assíncronas (ex: APIs, bancos, arquivos, redes)

🧠 Conclusão

Essas versões foram fundamentais para preparar o terreno para o C# moderno:

  • C# 4.0 flexibilizou a linguagem com dynamic e argumentos inteligentes.
  • C# 5.0 revolucionou a programação assíncrona com async/await.

Hoje, esses recursos são usados em praticamente todas as aplicações modernas em .NET, e dominar esse histórico ajuda você a entender melhor o design do C# atual (8.0+).


🤝 Conecte-se Comigo

Se você está aprendendo C#, modernizando sistemas ou explorando arquitetura .NET, vamos conversar:

Comments 1 total

  • Ben Huang
    Ben HuangJun 28, 2025

    C# version 13 Released November 2024

Add comment