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
欄位值
備註
下表列出指令的十六進位和 Microsoft 中繼語言 (MSIL) 元件格式,以及簡短的參考摘要:
格式 | 元件格式 | Description |
---|---|---|
FE 14 | 尾巴。 | 後續呼叫會終止目前的方法 |
此指令沒有定義堆疊轉換行為。
前置 tail
詞指令必須緊接在 Call、 Calli或 Callvirt 指令之前。 它表示在執行呼叫指令之前,應該移除目前方法的堆疊框架。 這也表示從下列呼叫傳回的值也是目前方法傳回的值,因此呼叫可以轉換成跨方法跳躍。
堆疊必須是空的,但下列呼叫所傳輸的自變數除外。 遵循呼叫指示的指示必須是重試。因此,唯一有效的程式代碼序列是 tail. call
(或 calli
或 callvirt
) 。 更正 Microsoft 中繼語言 (MSIL) 指示不得分支至 call
指令,但可能會分支至後續 Ret。
當控件從不受信任的程式代碼傳輸到信任的程式代碼時,無法捨棄目前的畫面格,因為這會影響程式代碼識別安全性。 因此tail
,.NET Framework 安全性檢查可能會導致 忽略 ,並留下標準Call指示。 同樣地,為了允許在呼叫傳回之後結束同步處理區域,當用來結束標示為已同步的方法時, tail
會忽略前置詞。
下列 Emit 方法多載可以使用 tail
opcode: