try 句と catch 句に加えて、CLR 例外処理では finally 句がサポートされています。 セマンティクスは、構造化例外処理 (SEH) の __finally ブロックと同じです。
__finally ブロックは、try または catch ブロックの後に使用できます。
解説
finally ブロックの目的は、例外が発生した後に、残されたすべてのリソースをクリーンアップすることです。 例外がスローされなかった場合でも、finally ブロックは常に実行されることに注意してください。
catch ブロックは、関連付けられている try ブロック内でマネージド例外がスローされた場合にのみ実行されます。
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