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

Publish Date: Jul 1
0 0

Entre 2012 e 2015, o C# deu um salto significativo em clareza de código e produtividade do desenvolvedor. Se o C# 5.0 foi a revolução da programação assíncrona com async/await, o C# 6.0 trouxe uma série de melhorias de linguagem para tornar o código mais limpo e intuitivo — sem mudar a base do compilador ou exigir novos conceitos complexos.

Neste artigo, você vai entender o que o C# 5.0 não tinha, mas o C# 6.0 passou a oferecer.


📌 Resumo rápido das melhorias do C# 6.0

Recurso Disponível no C# 6.0 C# 5.0 tem?
Interpolação de strings $"Olá, {nome}!"
Operador null-condicional obj?.Propriedade
nameof() nameof(Classe)
Inicializadores automáticos = valor em get; set;
using static using static Math;
Exceções com catch when catch when (...)
Expression-bodied members => em métodos

💡 Interpolação de strings ($"")

Uma das mudanças mais queridas do C# 6.0. Substitui o string.Format() por algo mais legível e seguro.

Antes (C# 5.0):

var msg = string.Format("Olá, {0}!", nome);
Enter fullscreen mode Exit fullscreen mode

Depois (C# 6.0):

var msg = $"Olá, {nome}!";
Enter fullscreen mode Exit fullscreen mode

✅ Mais legível
✅ Menos propenso a erros de posição


💡 Operador null-condicional (?.)

Evita NullReferenceException em acessos encadeados.

Antes (C# 5.0):

if (cliente != null && cliente.Endereco != null)
{
    Console.WriteLine(cliente.Endereco.Cidade);
}
Enter fullscreen mode Exit fullscreen mode

Depois (C# 6.0):

Console.WriteLine(cliente?.Endereco?.Cidade);
Enter fullscreen mode Exit fullscreen mode

✅ Código mais limpo
✅ Seguro contra null


💡 nameof() para refatoração segura

Permite referenciar nomes de variáveis, métodos ou propriedades como strings seguras para refatoração.

Antes (C# 5.0):

throw new ArgumentException("nome", "O campo é obrigatório.");
Enter fullscreen mode Exit fullscreen mode

Depois (C# 6.0):

throw new ArgumentException(nameof(nome), "O campo é obrigatório.");
Enter fullscreen mode Exit fullscreen mode

✅ Evita “magic strings”
✅ Refatorável com IntelliSense


💡 Inicializadores automáticos com valor padrão

Permite inicializar uma propriedade diretamente no momento da declaração.

Antes (C# 5.0):

public class Pessoa
{
    public string Nome { get; set; }

    public Pessoa()
    {
        Nome = "Desconhecido";
    }
}
Enter fullscreen mode Exit fullscreen mode

Depois (C# 6.0):

public class Pessoa
{
    public string Nome { get; set; } = "Desconhecido";
}
Enter fullscreen mode Exit fullscreen mode

✅ Menos código boilerplate
✅ Mais legibilidade


💡 Expression-bodied members (=>)

Ideal para métodos curtos, como ToString() ou propriedades simples.

Antes (C# 5.0):

public override string ToString()
{
    return Nome;
}
Enter fullscreen mode Exit fullscreen mode

Depois (C# 6.0):

public override string ToString() => Nome;
Enter fullscreen mode Exit fullscreen mode

✅ Conciso
✅ Expressivo


💡 using static para reduzir repetição

Permite importar métodos estáticos diretamente, sem precisar repetir o nome da classe.

Antes (C# 5.0):

var seno = Math.Sin(angulo);
var raiz = Math.Sqrt(valor);
Enter fullscreen mode Exit fullscreen mode

Depois (C# 6.0):

using static System.Math;

var seno = Sin(angulo);
var raiz = Sqrt(valor);
Enter fullscreen mode Exit fullscreen mode

✅ Útil em classes utilitárias ou matemáticas
✅ Código mais limpo


💡 catch when – Filtros de exceção

Permite capturar exceções com uma condição específica.

Antes (C# 5.0):

try
{
    //...
}
catch (SqlException ex)
{
    if (ex.Number == 1205)
        // tratar deadlock
}
Enter fullscreen mode Exit fullscreen mode

Depois (C# 6.0):

catch (SqlException ex) when (ex.Number == 1205)
{
    // tratar deadlock
}
Enter fullscreen mode Exit fullscreen mode

✅ Código mais coeso
✅ Mais próximo do try-catch do F#


🧠 Comparativo final

Funcionalidade C# 5.0 C# 6.0
Programação assíncrona (await)
Interpolação de strings ($"")
Null-safe operator (?.)
nameof()
Inicialização direta get; set;
catch when
=> para membros simples
using static

📘 Conclusão

Enquanto o C# 5.0 focou em concorrência assíncrona com async/await, o C# 6.0 trouxe uma série de refinamentos para melhorar a experiência do desenvolvedor. Ele não mudou conceitos fundamentais, mas elevou o nível de produtividade, clareza e segurança no código.

✅ Se você ainda está usando C# 5.0, vale a pena considerar a migração para versões mais modernas — começando pelo 6.0 — por questões de legibilidade, manutenibilidade e robustez.


🤝 Conecte-se Comigo

Se você está modernizando seu código .NET ou ensinando boas práticas com C#, vamos trocar ideias:

Comments 0 total

    Add comment