OpCodes.Tailcall Campo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Esegue un'istruzione di chiamata al metodo con suffisso tale da rimuovere lo stack frame del metodo corrente prima dell'esecuzione dell'istruzione di chiamata effettiva.
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
Valore del campo
Commenti
La tabella seguente elenca il formato dell'assembly esadecimale e Microsoft Intermediate Language (MSIL), insieme a un breve riepilogo di riferimento:
Formato | Formato assembly | Descrizione |
---|---|---|
FE 14 | Coda. | La chiamata successiva termina i metodi correnti |
Non esiste alcun comportamento di transizione dello stack definito per questa istruzione.
L'istruzione tail
prefisso deve precedere immediatamente un'istruzione Call, Callio Callvirt . Indica che il frame dello stack del metodo corrente deve essere rimosso prima dell'esecuzione dell'istruzione di chiamata. Implica anche che il valore restituito dalla chiamata seguente è anche il valore restituito dal metodo corrente e la chiamata può quindi essere convertita in un salto tra metodi.
Lo stack deve essere vuoto, ad eccezione degli argomenti trasferiti dalla chiamata seguente. L'istruzione che segue l'istruzione di chiamata deve essere un tentativo. Pertanto, l'unica sequenza di codice valida è tail. call
(o calli
callvirt
). Le istruzioni di Microsoft Intermediate Language (MSIL) corrette non devono eseguire il ramo all'istruzione call
, ma possono eseguire il ramo al successivo Ret.
Il frame corrente non può essere rimosso quando il controllo viene trasferito dal codice non attendibile al codice attendibile, poiché ciò comprometterebbe la sicurezza dell'identità del codice. I controlli di sicurezza di .NET Framework possono quindi causare l'ignorare tail
, lasciando un'istruzione standard Call . Analogamente, per consentire all'uscita di un'area sincronizzata di verificarsi dopo il ritorno della chiamata, il tail
prefisso viene ignorato quando viene usato per uscire da un metodo contrassegnato come sincronizzato.
L'overload del metodo seguente Emit può usare il tail
codice opcode: