finally
Além das cláusulas try
e catch
, o tratamento de exceção de CLR dá suporte a uma cláusula finally
. A semântica é idêntica ao bloco __finally
no SEH (tratamento de exceção estruturado). Um bloco __finally
pode seguir um bloqueio try
ou catch
.
Comentários
A finalidade do bloco finally
é limpar todos os recursos deixados após a exceção. Observe que o bloco finally
sempre é executado, mesmo que nenhuma exceção tenha sido gerada. O bloco catch
só será executado se uma exceção gerenciada for lançada dentro do bloco try
associado.
finally
é uma palavra-chave contextual; veja mais em Palavras-chave contextuais.
Exemplo
O exemplo a seguir demonstra um bloco finally
simples:
// keyword__finally.cpp
// compile with: /clr
using namespace System;
ref class MyException: public System::Exception{};
void ThrowMyException() {
throw gcnew MyException;
}
int main() {
try {
ThrowMyException();
}
catch ( MyException^ e ) {
Console::WriteLine( "in catch" );
Console::WriteLine( e->GetType() );
}
finally {
Console::WriteLine( "in finally" );
}
}
in catch
MyException
in finally