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 Postfixed-Methodenaufrufanweisung aus, sodass der Stapelframe der aktuellen Methode entfernt wird, bevor die tatsächliche Aufrufanweisung ausgeführt 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 Microsoft MSIL-Assemblyformat (Intermediate Language) der Anweisung zusammen mit einer kurzen Referenzzusammenfassung aufgeführt:
| Format | Assemblyformat | Description |
|---|---|---|
| FE 14 | Schwanz. | Der nachfolgende Aufruf beendet aktuelle Methoden. |
Für diese Anweisung ist kein Stapelübergangsverhalten definiert.
Die tail Präfixanweisung muss unmittelbar vor einem Call, Callioder Callvirt einer Anweisung vorangestellt sein. Es gibt an, dass der Stapelframe der aktuellen Methode entfernt werden soll, bevor die Aufrufanweisung ausgeführt wird. Es bedeutet auch, dass der vom folgenden Aufruf zurückgegebene Wert auch der von der aktuellen Methode zurückgegebene Wert ist, und der Aufruf kann daher in einen Quermethodensprung konvertiert werden.
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-Anweisung sein. Daher ist tail. call die einzige gültige Codesequenz (oder callicallvirt). Korrekte Microsoft MSIL-Anweisungen (Intermediate Language) dürfen nicht zur call Anweisung verzweigen, sie können jedoch zu den nachfolgenden Ret verzweigen.
Der aktuelle Frame kann nicht verworfen werden, wenn das Steuerelement vom nicht vertrauenswürdigen Code in vertrauenswürdigen Code übertragen wird, da dies die Codeidentitätssicherheit gefährden würde. Die Sicherheitsüberprüfungen des .NET Frameworks können daher dazu führen, dass die tail ignoriert werden, wodurch eine Standardanweisung Call bleibt. Entsprechend wird das tail Präfix ignoriert, wenn das Beenden eines synchronisierten Bereichs nach dem Aufruf zurückgegeben wird, wenn eine Methode beendet wird, die als synchronisiert gekennzeichnet ist.
Die folgende Emit Methodenüberladung kann den tail Opcode verwenden: