最終的に
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