OpCodes.Tailcall OpCodes.Tailcall OpCodes.Tailcall OpCodes.Tailcall Field

定義

実際の呼び出し命令が実行される前に、現在のメソッドのスタック フレームが削除されるように、後置のメソッド呼び出し命令を実行します。Performs a postfixed method call instruction such that the current method's stack frame is removed before the actual call instruction is executed.

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) アセンブリの形式を示します。The following table lists the instruction's hexadecimal and Microsoft Intermediate Language (MSIL) assembly format, along with a brief reference summary:

形式Format アセンブリの形式Assembly Format 説明Description
FE 14FE 14 末尾。tail. 後続の呼び出しでは、現在のメソッドを終了します。Subsequent call terminates current methods

この命令に対して定義されている履歴の移行の動作はありません。There is no stack transition behavior defined for this instruction.

tailプリフィックス命令の直前にする必要があります、 CallCalli、またはCallvirt命令。The tail prefix instruction must immediately precede a Call, Calli, or Callvirt instruction. これは、呼び出し命令が実行される前に、現在のメソッドのスタック フレームを削除するかを示します。It indicates that the current method's stack frame should be removed before the call instruction is executed. また、次の呼び出しから返される値も、現在のメソッドによって返される値と、メソッド間のジャンプに呼び出しを変換したがってできることを意味します。It also implies that the value returned from the following call is also the value returned by the current method, and the call can therefore be converted into a cross-method jump.

スタックは、次の呼び出しによって転送される引数を除く空にする必要があります。The stack must be empty except for the arguments being transferred by the following call. Ret 呼び出し命令を次の命令があります。したがって、唯一の有効なコード シーケンスはtail. call(またはcalliまたはcallvirt)。The instruction following the call instruction must be a ret. Thus the only valid code sequence is tail. call (or calli or callvirt). 正しい Microsoft Intermediate Language (MSIL) 命令に分岐する必要がありますいない、callが、命令に分岐するそれに続く可能性がありますRetします。Correct Microsoft Intermediate Language (MSIL) instructions must not branch to the call instruction, but they may branch to the subsequent Ret.

コントロールに転送される信頼されていないコードから信頼されたコードは、id のセキュリティをコードから、現在のフレームを破棄できません。The current frame cannot be discarded when control is transferred from untrusted code to trusted code, since this would jeopardize code identity security. 発生する可能性がそのための .NET Framework セキュリティ チェックが、tailは無視され、標準のままCall命令。The .NET Framework security checks can therefore cause the tail to be ignored, leaving a standard Call instruction. 同様の順序、呼び出しが返された後に発生する同期された領域を終了できるようにする、tail同期済みとマークされているメソッドの終了に使用する場合、プレフィックスは無視されます。Similarly, in order to allow the exit of a synchronized region to occur after the call returns, the tail prefix is ignored when used to exit a method that is marked synchronized.

Emitメソッドのオーバー ロードを使用できる、 tail opcode:The following Emit method overload can use the tail opcode:

  • ILGenerator.Emit(OpCode)ILGenerator.Emit(OpCode)

適用対象