OpCodes.Tailcall Feld
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Führt eine Postfix-Methodenaufrufanweisung in der Weise aus, dass der Stapelrahmen der aktuellen Methode vor der Ausführung der eigentlichen Aufrufanweisung entfernt wird.
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
Feldwert
Hinweise
In der folgenden Tabelle sind das Hexadezimal- und MSIL-Assemblyformat (Microsoft Intermediate Language) der Anweisung sowie eine kurze Referenzzusammenfassung aufgeführt:
Format | Assemblyformat | BESCHREIBUNG |
---|---|---|
FE 14 | Schwanz. | Der nachfolgende Aufruf beendet aktuelle Methoden. |
Für diese Anweisung ist kein Stapelübergangsverhalten definiert.
Die tail
Präfixanweisung muss unmittelbar einer Call, Callioder Callvirt -Anweisung vorangestellt werden. Es gibt an, dass der Stapelrahmen der aktuellen Methode entfernt werden soll, bevor die Aufrufanweisung ausgeführt wird. Dies impliziert auch, dass der vom folgenden Aufruf zurückgegebene Wert auch der von der aktuellen Methode zurückgegebene Wert ist und der Aufruf daher in einen methodenübergreifenden Sprung konvertiert werden kann.
Der Stapel muss leer sein, mit Ausnahme der Argumente, die durch den folgenden Aufruf übertragen werden. Die Anweisung, die auf die Aufrufanweisung folgt, muss eine ret sein. Daher ist tail. call
die einzige gültige Codesequenz (oder calli
oder callvirt
). Korrekte MSIL-Anweisungen (Microsoft Intermediate Language) dürfen nicht mit der call
-Anweisung verzweigt werden, aber sie können mit der nachfolgenden Retverzweigt werden.
Der aktuelle Frame kann nicht verworfen werden, wenn die Steuerung von nicht vertrauenswürdigem Code in vertrauenswürdigen Code übertragen wird, da dies die Sicherheit der Codeidentität gefährden würde. Die .NET Framework Sicherheitsüberprüfungen kann daher dazu führen, dass ignoriert tail
wird, sodass eine Standardanweisung Call erhalten bleibt. Ebenso wird das Präfix ignoriert, wenn zum Beenden einer methode verwendet wird, die tail
als synchronisiert markiert ist.
Die folgende Emit Methodenüberladung kann den tail
Opcode verwenden: