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

Publish Date: Jun 10
0 0

As versões iniciais do C# (lançadas entre 2002 e 2003) evoluíram rapidamente com melhorias pontuais, mas significativas. O C# 1.2, embora uma atualização menor, trouxe melhorias que impactaram diretamente a segurança e a performance do código. Vamos explorar essas diferenças com exemplos práticos.


📌 O que havia no C# 1.0

Lançado junto com o .NET Framework 1.0, o C# 1.0 incluía os elementos básicos da linguagem moderna:

  • Tipos base (class, struct, interface, enum)
  • Delegates e eventos
  • Propriedades
  • Tratamento de exceções
  • Atributos personalizados
  • Coleções com foreach

✅ Exemplo clássico de foreach em C# 1.0:

string[] nomes = { "Ana", "Bruno", "Carlos" };

foreach (string nome in nomes)
{
    Console.WriteLine(nome);
}
Enter fullscreen mode Exit fullscreen mode

🔍 Em C# 1.0, o compilador não chamava automaticamente Dispose() de um iterador, mesmo que ele implementasse IDisposable.


🆕 O que foi adicionado no C# 1.2

A versão C# 1.2 (abril de 2003) introduziu duas mudanças sutis, porém importantes:

1. Chamada automática de Dispose() no foreach

Antes do C# 1.2, se você iterasse sobre um objeto que implementava IDisposable, era necessário chamar manualmente o método Dispose. A partir do 1.2, o compilador passou a gerar esse código automaticamente.

🔄 Exemplo comparativo

Antes (C# 1.0) – sem Dispose automático:

public class MeuIterator : IEnumerator, IDisposable
{
    public object Current => null;

    public bool MoveNext() => false;

    public void Reset() {}

    public void Dispose()
    {
        Console.WriteLine("Dispose chamado manualmente");
    }
}
Enter fullscreen mode Exit fullscreen mode

Depois (C# 1.2)Dispose() chamado automaticamente ao fim do foreach:

IEnumerable recursos = new List<IDisposable> { new MeuIterator() };

foreach (IDisposable recurso in recursos)
{
    // Ao sair do loop, Dispose será chamado automaticamente
}
Enter fullscreen mode Exit fullscreen mode

2. Especialização do foreach para string

No C# 1.0, foreach funcionava com IEnumerable, mas strings eram tratadas genericamente. No C# 1.2, o compilador passou a otimizar esse uso para iteração direta sobre os caracteres da string.

🔤 Exemplo:

string texto = "Olá";

foreach (char c in texto)
{
    Console.WriteLine(c);
}
Enter fullscreen mode Exit fullscreen mode

⚙️ Internamente, o compilador passou a gerar código mais eficiente, tratando string como uma sequência de char com acesso direto por índice.


📊 Tabela Comparativa: C# 1.0 vs C# 1.2

Recurso C# 1.0 C# 1.2
foreach com Dispose() automático
Otimização do foreach para string
Tipos base e delegação
Propriedades e eventos

✅ Conclusão

Apesar de ser uma atualização menor, o C# 1.2 trouxe otimizações importantes para o uso do foreach, reduzindo erros de liberação de recursos e melhorando o desempenho ao iterar sobre strings. Essas melhorias ajudaram a consolidar boas práticas de programação segura e eficiente já nas primeiras versões da linguagem.


🤝 Conecte-se Comigo

Comments 0 total

    Add comment