Partager via


OpCodes.Tailcall Champ

Définition

Exécute une instruction d'appel de méthode suffixée afin que le frame de pile de la méthode actuelle soit supprimé avant cette exécution.

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 

Valeur de champ

Remarques

Le tableau suivant répertorie le format d’assembly MSIL et hexadécimal de l’instruction, ainsi qu’un bref résumé des références :

Format Format d’assembly Description
FE 14 Queue. L’appel suivant met fin aux méthodes actuelles

Aucun comportement de transition de pile n’est défini pour cette instruction.

L’instruction tail préfixe doit immédiatement précéder une Callinstruction , Calliou Callvirt . Cela indique que la trame de pile de la méthode actuelle doit être supprimée avant l’exécution de l’instruction d’appel. Cela implique également que la valeur retournée par l’appel suivant est également la valeur retournée par la méthode actuelle, et que l’appel peut donc être converti en saut de méthode croisée.

La pile doit être vide, sauf pour les arguments transférés par l’appel suivant. L’instruction qui suit l’instruction d’appel doit être un ret. Par conséquent, la seule séquence de code valide est tail. call (ou calli ).callvirt Les instructions MSIL (Microsoft Intermediate Language) correctes ne doivent pas se brancher à l’instruction call , mais elles peuvent se brancher vers le suivant Ret.

La trame actuelle ne peut pas être ignorée lorsque le contrôle est transféré d’un code non approuvé vers du code approuvé, car cela compromettrait la sécurité de l’identité du code. Les vérifications de sécurité .NET Framework peuvent donc entraîner l’ignorer tail , ce qui laisse une instruction standard Call . De même, pour permettre la sortie d’une région synchronisée après le retour de l’appel, le tail préfixe est ignoré lorsqu’il est utilisé pour quitter une méthode marquée synchronisée.

La surcharge de méthode suivante Emit peut utiliser l’opcode tail :

S’applique à