IDisposable, instrução using
Implemente IDisposable, use a instrução using para uma limpeza determinística e compare-a com try/finally manual. Somente C# 6.
IDisposable, instrução using é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 3 aulas no total.
Por que IDisposable + using
Objetivo: liberar recursos de forma determinística.
- Implemente IDisposable
- Use a instrução using (C# 6)
- Compare com try/finally
- Mantenha a limpeza pequena e segura
Implementação de IDisposable
Implemente IDisposable.Dispose para liberar recursos (arquivos, soquetes e identificadores). Garanta que a operação possa ser repetida com segurança.
using System;
// Simple disposable that tracks whether it was cleaned up
public sealed class FakeConnection : IDisposable
{
public bool IsOpen { get; private set; }
public FakeConnection()
{
IsOpen = true;
Console.WriteLine("Open");
}
public void Dispose()
{
if (IsOpen)
{
IsOpen = false;
Console.WriteLine("Close");
}
}
}
public class Program
{
public static void Main(string[] args)
{
FakeConnection c = new FakeConnection();
c.Dispose(); // manual cleanup
}
}
Padrão try/finally
try/finally garante a limpeza, mas é prolixo e fácil de esquecer. A instrução using é uma forma abreviada.
using System;
public sealed class FakeConnection : IDisposable
{
public void Dispose() { Console.WriteLine("Dispose called"); }
public void Send(string msg) { Console.WriteLine("Send: " + msg); }
}
public class Program
{
public static void Main(string[] args)
{
// Manual try/finally
FakeConnection a = null;
try
{
a = new FakeConnection();
a.Send("A");
throw new Exception("boom");
}
finally
{
if (a != null) a.Dispose(); // runs even on exception
}
// unreachable due to thrown exception in this demo
}
}
Demonstração da instrução using
A instrução using envolve um try/finally oculto; Dispose é chamado quando o bloco termina.
using System;
public sealed class FakeConnection : IDisposable
{
public void Dispose() { Console.WriteLine("Dispose called"); }
public void Work() { Console.WriteLine("Working"); }
}
public class Program
{
public static void Main(string[] args)
{
try
{
using (FakeConnection c = new FakeConnection())
{
c.Work();
throw new InvalidOperationException("oops");
} // Dispose runs here automatically
}
catch (Exception)
{
Console.WriteLine("Handled");
}
}
}
E/S com using
A maioria dos tipos de E/S implementa IDisposable. Use using para que os identificadores sejam fechados imediatamente.
using System;
using System.IO;
public class Program
{
public static void Main(string[] args)
{
// Create a small temp file then read it
string path = "demo.txt";
File.WriteAllText(path, "hello");
using (StreamReader r = new StreamReader(path))
{
string text = r.ReadToEnd();
Console.WriteLine(text);
} // r.Dispose() closes the file handle
}
}
Dicas e armadilhas do using
Dicas:
- Prefira using a chamadas manuais de Dispose.
- Mantenha Dispose pequeno e seguro (sem lançamentos de exceções, se possível).
- Não use objetos depois que forem descartados.
- Para vários recursos, aninhe blocos using para controlar a ordem.
Garantia da instrução using
Recapitulação
Recapitulação: implemente IDisposable para recursos e envolva o uso em um bloco using para garantir a limpeza por meio de um try/finally oculto no C# 6.
Perguntas Frequentes
A aula “IDisposable, instrução using” é grátis?
Sim — o texto completo de “IDisposable, instrução using” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 3 aulas no total.
O que vou aprender em “IDisposable, instrução using”?
Implemente IDisposable, use a instrução using para uma limpeza determinística e compare-a com try/finally manual. Somente C# 6. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C# Academy?
Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.
Quanto tempo leva a aula “IDisposable, instrução using”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C# Academy?
Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- try/catch/finally, throw new versus relançamento
- Exceções personalizadas; projeto de erros
- IDisposable, instrução using