How to: Executar usando Código de limpeza finalmente (guia de programação C#)
A finalidade de um finally instrução é para garantir que a limpeza necessária de objetos, normalmente os objetos que estão mantendo a recursos externos, se ocorre imediatamente, mesmo se uma exceção é lançada. Um exemplo de tal limpeza está chamando Close em um FileStream imediatamente após o uso em vez de esperar para o objeto a ser lixo coletado pelo common language runtime, da seguinte maneira:
static void CodeWithoutCleanup()
{
System.IO.FileStream file = null;
System.IO.FileInfo fileInfo = new System.IO.FileInfo("C:\\file.txt");
file = fileInfo.OpenWrite();
file.WriteByte(0xF);
file.Close();
}
Exemplo
Para ativar o código anterior em um try-catch-finally a instrução, o código de limpeza é separada do código de trabalho, como segue:
static void CodeWithCleanup()
{
System.IO.FileStream file = null;
System.IO.FileInfo fileInfo = null;
try
{
fileInfo = new System.IO.FileInfo("C:\\file.txt");
file = fileInfo.OpenWrite();
file.WriteByte(0xF);
}
catch(System.UnauthorizedAccessException e)
{
System.Console.WriteLine(e.Message);
}
finally
{
if (file != null)
{
file.Close();
}
}
}
Porque uma exceção pode ocorrer a qualquer momento dentro do try Bloquear antes do OpenWrite() chamar, ou o OpenWrite() própria chamada pode falhar, nós não há garantia de que o arquivo é aberto quando tentamos feche-o. O finally bloco adiciona uma verificação para certificar-se de que o FileStream o objeto não é null antes de chamar o Close método. Sem o null Verificar, o finally bloco poderia lançar sua própria NullReferenceException, mas gerar exceções finally blocos devem ser evitados se for possível.
Uma conexão de banco de dados é outro bom candidato sendo fechado um finally bloco. Como o número de conexões permitidas para um servidor de banco de dados, às vezes, é limitado, você deve fechar conexões de banco de dados mais rápido possível. Se uma exceção é lançada antes de fechar a conexão, este é outro caso onde usando o finally bloco é melhor do que esperar para coleta de lixo.
Consulte também
Referência
Exceptions and Exception Handling (C# Programming Guide)
(Guia de programação C#) de manipulação de exceção
usando instrução (referência de C#)
Tente catch de--finalmente (referência de C#)