Como: Executar o código de limpeza com finalmente (translation from VPE for Csharp Programming guia)
A finalidade de um finally demonstrativo é para garantir que a limpeza necessária de objetos, normalmente os objetos que estão mantendo recursos externos, ocorre imediatamente, mesmo se uma exceção é lançada. Um exemplo de tal limpeza está chamando Close em um FileStream imediatamente após usar em vez de aguardar o objeto para ser lixo coletado pelo common linguagem tempo de execução, sistema autônomo segue:
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 transformar o código anterior em um try-catch-finally demonstrativo, o código de limpeza é separada do código de trabalho, da seguinte maneira.
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 de try Bloquear antes da OpenWrite() chamar, ou o OpenWrite() própria telefonar pode falhar, nós não são garantidas que o arquivo é em aberto quando tentamos para fechá-lo. The 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 pode lançar seu próprio NullReferenceException, mas gerar exceções finally blocos devem ser evitados se possível.
Uma conexão de banco de dados é outro mercadoria candidato ao que está sendo fechado em um finally bloco. sistema autônomo 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, esse é outro caso em que usar o finally bloco é melhor do que aguardar a coleta de lixo.
Consulte também
Conceitos
Referência
Exceções e manipulação de exceção (guia de programação C#)
Tratamento exceção (guia de programação translation from VPE for Csharp)
usando demonstrativo (referência translation from VPE for Csharp)
try-finally (Referência do C#)
try-catch-finally (translation from VPE for Csharp Reference)