CLR 例外処理では、trycatch の句に加え、finally 句もサポートしています。In addition to try and catch clauses, CLR exception handling supports a finally clause. セマンティクスは、構造化例外処理 (SEH) の __finally ブロックと同じです。The semantics are identical to the __finally block in structured exception handling (SEH). __finally ブロックは、try または catch ブロックの後に続くことができます。A __finally block can follow a try or catch block.


finally ブロックの目的は、例外が発生した後に残されたすべてのリソースをクリーンアップすることです。The purpose of the finally block is to clean up any resources left after the exception occurred. 例外がスローされなかった場合でも、finally ブロックは常に実行されることに注意してください。Note that the finally block is always executed, even if no exception was thrown. catch ブロックは、関連付けられた try ブロック内でマネージ例外がスローされた場合にのみ実行されます。The catch block is only executed if a managed exception is thrown within the associated try block.

finally は、状況依存のキーワードです。詳細については、「状況依存のキーワード」を参照してください。finally is a context-sensitive keyword; see Context-Sensitive Keywords for more information.


単純な finally ブロックの例を次に示します。The following example demonstrates a simple finally block:

// keyword__finally.cpp
// compile with: /clr
using namespace System;

ref class MyException: public System::Exception{};

void ThrowMyException() {
   throw gcnew MyException;

int main() {
   try {
   catch ( MyException^ e ) {
      Console::WriteLine(  "in catch" );
      Console::WriteLine( e->GetType() );
   finally {
      Console::WriteLine(  "in finally" );
in catch
in finally

参照See also

例外処理Exception Handling