OpCodes.Tailcall フィールド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
実際の呼び出し命令が実行される前に現在のメソッドのスタック フレームが削除されるように、後置メソッド呼び出し命令を実行します。
public: static initonly System::Reflection::Emit::OpCode Tailcall;
public static readonly System.Reflection.Emit.OpCode Tailcall;
staticval mutable Tailcall : System.Reflection.Emit.OpCode
Public Shared ReadOnly Tailcall As OpCode
フィールド値
注釈
次の表に、命令の 16 進数および Microsoft Intermediate Language (MSIL) アセンブリ形式と、簡単なリファレンス概要を示します。
| フォーマット | アセンブリ形式 | Description |
|---|---|---|
| FE 14 | 尾。 | 後続の呼び出しで現在のメソッドが終了する |
この命令にはスタック遷移動作が定義されていません。
tailプレフィックス命令は、Call、Calli、またはCallvirt命令の直前に置く必要があります。 これは、呼び出し命令が実行される前に、現在のメソッドのスタック フレームを削除する必要があることを示します。 また、次の呼び出しから返される値も現在のメソッドによって返される値であり、したがって、呼び出しをメソッド間ジャンプに変換できることを意味します。
スタックは、次の呼び出しによって転送される引数を除き、空である必要があります。 呼び出し命令の後の命令は ret である必要があります。したがって、唯一の有効なコード シーケンスは tail. call (または calli または callvirt) です。 正しい Microsoft Intermediate Language (MSIL) 命令は、call 命令に分岐してはなりませんが、後続の Ret に分岐する可能性があります。
信頼されていないコードから信頼されたコードに制御が転送されると、コード ID のセキュリティが損なわれるため、現在のフレームを破棄できません。 そのため、.NET Framework のセキュリティ チェックにより、tailが無視され、標準の Call 命令が残される可能性があります。 同様に、呼び出しが戻った後に同期リージョンの終了を実行できるようにするために、 tail プレフィックスは、同期済みとマークされたメソッドを終了するために使用されるときに無視されます。
次の Emit メソッドオーバーロードでは、 tail オペコードを使用できます。