OpCodes.Tailcall Champ
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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
: