Freigeben über


OpCodes.Tailcall-Feld

Führt eine Postfix-Methodenaufrufanweisung in der Weise aus, dass der Stapelrahmen der aktuellen Methode vor der Ausführung der eigentlichen Aufrufanweisung entfernt wird.

Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Shared ReadOnly Tailcall As OpCode
'Usage
Dim value As OpCode

value = OpCodes.Tailcall
public static readonly OpCode Tailcall
public:
static initonly OpCode Tailcall
public static final OpCode Tailcall
public static final var Tailcall : OpCode

Hinweise

In der folgenden Tabelle werden das hexadezimale und das Assemblyformat der MSIL (Microsoft Intermediate Language) jeweils mit einer Kurzreferenz aufgeführt:

Format

Assemblyformat

Beschreibung

FE 14

tail.

Nachfolgender Aufruf beendet aktuelle Methoden

Für diese Anweisung sind im Stapel keine Zustandswechsel definiert.

Die tail-Präfixanweisung muss unmittelbar einer Call-Anweisung, einer Calli-Anweisung oder einer Callvirt-Anweisung vorangehen. Damit wird angegeben, dass der Stapelrahmen der aktuellen Methode entfernt werden muss, bevor die Aufrufanweisung ausgeführt wird. Darüber hinaus wird damit angezeigt, dass der durch den folgenden Aufruf zurückgegebene Wert dem von der aktuellen Methode zurückgegebenen Wert entspricht und der Aufruf daher in einen methodenübergreifenden Sprung umgewandelt werden kann.

Der Stapel muss bis auf die durch den folgenden Aufruf übertragenen Argumente leer sein. Die auf die Aufrufanweisung folgende Anweisung muss eine ret-Anweisung sein. Die einzige gültige Codesequenz lautet daher tail. call (bzw. calli oder callvirt). Ordnungsgemäße MSIL (Microsoft Intermediate Language)-Anweisungen dürfen nicht zur call-Anweisung verzweigen, eine Verzweigung zur nachfolgenden Ret ist jedoch erlaubt.

Der aktuelle Stapel kann nicht entfernt werden, wenn die Steuerung von nicht vertrauenswürdigem Code an vertrauenswürdigen Code übertragen wird, da dies die Sicherheit der Codeidentität gefährden würde. Die .NET Framework-Sicherheitsprüfungen bewirken daher ggf., dass tail ignoriert und nur eine Call-Anweisung ausgeführt wird. Damit nach erfolgter Rückgabe durch einen Aufruf das Verlassen eines synchronisierten Bereichs möglich ist, wird das tail-Präfix ebenfalls ignoriert, wenn es zum Beenden einer Methode verwendet wird, die als synchronisiert gekennzeichnet ist.

Die folgende Überladung der Emit-Methode verwendet den tail-Opcode:

  • ILGenerator.Emit(OpCode)

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

OpCodes-Klasse
OpCodes-Member
System.Reflection.Emit-Namespace