共用方式為


OpCodes.Tailcall 欄位

定義

執行後置的方法呼叫指令 (例如目前方法的堆疊框架) 會在執行實際的呼叫指令之前移除。

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 

欄位值

備註

下表列出指令的十六進位和 Microsoft 中繼語言 (MSIL) 元件格式,以及簡短的參考摘要:

格式 元件格式 Description
FE 14 尾巴。 後續呼叫會終止目前的方法

此指令沒有定義堆疊轉換行為。

前置 tail 詞指令必須緊接在 CallCalliCallvirt 指令之前。 它表示在執行呼叫指令之前,應該移除目前方法的堆疊框架。 這也表示從下列呼叫傳回的值也是目前方法傳回的值,因此呼叫可以轉換成跨方法跳躍。

堆疊必須是空的,但下列呼叫所傳輸的自變數除外。 遵循呼叫指示的指示必須是重試。因此,唯一有效的程式代碼序列是 tail. call (或 callicallvirt) 。 更正 Microsoft 中繼語言 (MSIL) 指示不得分支至 call 指令,但可能會分支至後續 Ret

當控件從不受信任的程式代碼傳輸到信任的程式代碼時,無法捨棄目前的畫面格,因為這會影響程式代碼識別安全性。 因此tail,.NET Framework 安全性檢查可能會導致 忽略 ,並留下標準Call指示。 同樣地,為了允許在呼叫傳回之後結束同步處理區域,當用來結束標示為已同步的方法時, tail 會忽略前置詞。

下列 Emit 方法多載可以使用 tail opcode:

適用於