O que C# 2.0 não tem que C# 3.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# 2.0 não tem que C# 3.0 tem ?

Publish Date: Jun 21
0 0

Todo caminho do homem é reto aos seus olhos, mas o Senhor sonda os corações. Provérbios 21:2

A linguagem C# passou por diversas evoluções desde sua primeira versão. A mudança da versão 2.0 para a 3.0 foi particularmente marcante por trazer um conjunto poderoso de recursos que serviram de base para LINQ e para uma forma mais expressiva e funcional de programar.

Neste artigo, você vai entender:

  • O que existia em C# 2.0
  • Quais os recursos introduzidos no C# 3.0
  • Exemplos práticos comparando os dois
  • Por que essas mudanças foram importantes

🕰️ Contexto histórico

Versão Lançamento Destaques principais
C# 2.0 2005 Generics, Nullable Types, Anonymous Methods
C# 3.0 2007 LINQ, Lambdas, var, Extension Methods

🚫 O que C# 2.0 não tem (e C# 3.0 trouxe)

A seguir, você verá as principais funcionalidades novas da versão 3.0, que não existiam na versão 2.0.


1. ✅ Inferência de Tipo com var

C# 2.0:

string nome = "Danilo";
Enter fullscreen mode Exit fullscreen mode

C# 3.0:

var nome = "Danilo"; // o compilador infere que é string
Enter fullscreen mode Exit fullscreen mode

Útil para tipos anônimos e código mais limpo, especialmente com LINQ.


2. ✅ Expressões Lambda

C# 2.0 (usando delegate anônimo):

list.Find(delegate(int x) { return x > 10; });
Enter fullscreen mode Exit fullscreen mode

C# 3.0 (com lambda):

list.Find(x => x > 10);
Enter fullscreen mode Exit fullscreen mode

Mais legibilidade e base para LINQ.


3. ✅ Tipos Anônimos

var pessoa = new { Nome = "Ana", Idade = 28 };
Console.WriteLine(pessoa.Nome); // "Ana"
Enter fullscreen mode Exit fullscreen mode

Permite criar objetos sem classes explícitas. Ideal para retornos em LINQ.


4. ✅ Inicializadores de Objetos e Coleções

var pessoa = new Pessoa { Nome = "Lucas", Idade = 20 };

var lista = new List<int> { 1, 2, 3 };
Enter fullscreen mode Exit fullscreen mode

Menos código repetitivo para instanciar e configurar objetos.


5. ✅ Métodos de Extensão

public static class StringExtensions
{
    public static bool EstaVazia(this string valor)
        => string.IsNullOrWhiteSpace(valor);
}

// Uso:
var nome = " ";
bool vazia = nome.EstaVazia();
Enter fullscreen mode Exit fullscreen mode

Permite "adicionar métodos" a tipos existentes sem herança.


6. ✅ LINQ (Language Integrated Query)

var maiores = from pessoa in pessoas
              where pessoa.Idade > 25
              select pessoa.Nome;
Enter fullscreen mode Exit fullscreen mode

Essa sintaxe declarativa só foi possível com os recursos anteriores (lambdas, var, etc.).


7. ✅ Árvores de Expressão (Expression Trees)

Expression<Func<int, bool>> exp = x => x > 10;
Enter fullscreen mode Exit fullscreen mode

Muito utilizadas em LINQ-to-SQL, EF e bibliotecas como AutoMapper e MediatR.


8. ✅ Partial Methods

partial class Pessoa
{
    partial void Validar();
}
Enter fullscreen mode Exit fullscreen mode

Permite métodos que podem ou não ser implementados, úteis em código gerado.


🧠 Resumo comparativo

Funcionalidade C# 2.0 C# 3.0
var (inferência de tipo)
Lambda Expressions
Tipos Anônimos
Inicializadores de objeto
Inicializadores de coleção
Métodos de extensão
LINQ
Árvores de expressão
Partial Methods

🔍 Por que essas mudanças foram importantes?

Esses recursos deram origem a uma nova forma de programar em C#:

  • Mais expressividade: código que representa melhor a intenção
  • Base para LINQ: um dos maiores avanços na linguagem
  • Abordagem mais funcional: menos boilerplate, mais composição
  • Integração mais fluida com dados: especialmente bancos e coleções

🧪 Quer testar na prática?

Você pode ver a diferença criando dois projetos:

dotnet new console -f net2.0 -n CSharp2
dotnet new console -f net8.0 -n CSharp3Plus
Enter fullscreen mode Exit fullscreen mode

Em CSharp2, tente usar var, lambdas ou LINQ — verá que eles não são suportados.


🤝 Conecte-se Comigo

Se você curte entender a evolução da linguagem C# e quer continuar se aprofundando em arquitetura e boas práticas, bora trocar ideias:

Comments 0 total

    Add comment