OpCodes.Tailcall Campo
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Ejecuta una instrucción máquina de llamada a método postfija de tal modo que el marco de pila del método actual se quita antes de que se ejecute la verdadera instrucción máquina de llamada.
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 lenguaje intermedio de Microsoft (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 se debe quitar el marco de pila del método actual antes de ejecutar 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 calli
).callvirt
Las instrucciones correctas del lenguaje intermedio de Microsoft (MSIL) no deben bifurcarse a la call
instrucción, pero pueden bifurcarse a la posterior Ret.
No se puede descartar el marco actual cuando el control se transfiere desde 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 tail
que se omita, dejando una instrucción estándar Call . De forma similar, para permitir que se produzca la salida de una región sincronizada después de que se devuelva la llamada, el tail
prefijo se omite 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: