finally
除了 try
和 catch
子句外,CLR 异常处理还支持 finally
子句。 语义与结构化异常处理 (SEH) 中的 __finally
块相同。 __finally
块可以跟在 try
或 catch
块之后。
finally
的目的是清理出现异常后留下的任何资源。 请注意,即使未引发异常,也会始终执行 finally
块。 只有在关联的 try
块内引发托管异常时,才会执行 catch
块。
finally
是与上下文相关的关键字;有关详细信息,请参阅上下文相关的关键字。
下面的示例演示了一个简单 finally
块:
// 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