Digamos que você precise criar um diretório temporário e excluí-lo depois de terminar.
Então você escreve um código assim:
DirectoryInfo tmpdir = Helper.CreateTemporaryDirectory();
DoStuff(tmpdir);
tmpdir.Delete(true);
Fácil, certo? Bem, e se houver uma exceção e o diretório for
excluído mais recentemente? Você pode, é claro, encerrar as chamadas para tentar – finalmente, mas pode ser
muito complicado, especialmente se você precisar fazer isso muito.
Para remediar isso, você pode implementar IDisposable e deixar o compilador se preocupar
com tudo:
class TemporaryDirectory : IDisposable
{
public DirectoryInfo Directory { get; private set; }
public TemporaryDirectory()
{
Directory = Helper.CreateTemporaryDirectory();
}
public void Dispose()
{
if (Directory != null)
Directory.Delete(true);
Directory = null;
}
}
Quando você usa sua nova classe desta forma:
using (var tmpdir = new TemporaryDirectory())
DoStuff(tmpdir.Directory);
Você não precisa se preocupar com a limpeza, pois isso acontecerá automaticamente.