例外ブロックの fault 句または finally 句から Common Language Infrastructure (CLI) 例外ハンドラに制御を転送します。
Public Shared ReadOnly Endfinally As OpCode
[C#]
public static readonly OpCode Endfinally;
[C++]
public: static OpCode Endfinally;
[JScript]
public static var Endfinally : OpCode;
解説
命令の 16 進数の形式、MSIL (Microsoft Intermediate Language) アセンブリ形式、および簡単な説明の一覧を次の表に示します。
形式 | アセンブリ形式 | 説明 |
---|---|---|
DC | endfinally
endfault |
例外ブロックの finally 句または fault 句を終了します。 |
この命令には、スタックの遷移動作はありません。
Endfinally と endfault は finally 句または fault 句の終わりを示すため、スタック アンワインドは、例外ハンドラが呼び出されるまで継続できます。 endfinally 命令または endfault 命令は、CLI 例外機構に制御を転送ます。保護されたブロックが leave 命令によって終了した場合、CLI 例外機構はチェイン内の次の finally 句を検索します。保護されたブロックが例外によって終了した場合、CLI は、次の finally または fault を検索するか、最初に例外処理を渡すときに選択した例外ハンドラを入力します。
endfinally 命令は、finally ブロック内で字句でだけ表示できます。 endfilter 命令とは異なり、 endfinally 命令でブロックを終了する必要はなく、ブロック内で必要に応じた数の endfinally 命令を使用できます。これらの制限は、 endfault 命令と fault ブロックにも適用されます。
例外処理機構を通じて転送される場合を除き、finally (または fault) ブロック内には制御を転送できません。 throw 命令を使用する場合、あるいは endfinally (または endfault) 命令を実行する場合を除き、finally (または fault) ブロックからは制御を転送できません。特に、finally (または fault) ブロックの "外に出る" こと、つまり finally (または fault) ブロック内で Ret 命令または Leave 命令を実行することはできません。
endfault 命令と endfinally 命令はエイリアスであり、同じオペコードに対応しています。
endfinally (endfault) オペコードと ILGenerator メソッド EndExceptionBlock を使用できる Emit コンストラクタ オーバーロードを次に示します。
- ILGenerator.Emit(OpCode)
- ILGenerator.EndExceptionBlock()
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ