OpCodes.Tailcall Campo

Definición

Realiza una instrucción de llamada de método postfijo de modo que el marco de pila del método actual se quita antes de que se ejecute la instrucción de llamada real.

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 

Valor de campo

Comentarios

En la tabla siguiente se muestra el formato de ensamblado hexadecimal y Microsoft lenguaje intermedio (MSIL), junto con un breve resumen de referencia:

Formato Formato de ensamblado Descripción
FE 14 cola. La llamada posterior finaliza los métodos actuales

No hay ningún comportamiento de transición de pila definido para esta instrucción.

La tail instrucción de prefijo debe preceder inmediatamente a una Callinstrucción , Callio Callvirt . Indica que el marco de pila del método actual debe quitarse antes de que se ejecute la instrucción de llamada. También implica que el valor devuelto desde la siguiente llamada también es el valor devuelto por el método actual y, por tanto, la llamada se puede convertir en un salto entre métodos.

La pila debe estar vacía, excepto para los argumentos transferidos por la siguiente llamada. La instrucción que sigue a la instrucción de llamada debe ser un ret. Por lo tanto, la única secuencia de código válida es tail. call (o callicallvirt). Las instrucciones de lenguaje intermedio (MSIL) correctas Microsoft no deben bifurcarse a la instrucción call, pero pueden bifurcarse a la Ret posterior.

No se puede descartar el marco actual cuando el control se transfiere de código que no es de confianza al código de confianza, ya que esto ponería en peligro la seguridad de la identidad del código. Por lo tanto, las comprobaciones de seguridad de .NET Framework pueden hacer que se omita la > estándar. Del mismo modo, para permitir que se produzca la salida de una región sincronizada después de que se devuelva la llamada, se omite el tail prefijo cuando se usa para salir de un método marcado como sincronizado.

La sobrecarga del método siguiente Emit puede usar el tail código de operación:

Se aplica a