OpCodes.Tailcall Feld

Definition

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:

Gilt für: