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
❗ 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
🧠 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+
Contravariância (in
)
Action<object> objAction = s => Console.WriteLine(s);
Action<string> strAction = objAction; // Funciona no C# 4.0+
🔧 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"));
✅ 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;
}
🔄 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:
- 💻 Dev.to
- 📬 contato@dopme.io
C# version 13 Released November 2024