OpCodes.Tailcall Fält

Definition

Utför en postfixad metodanropsinstruktion så att den aktuella metodens stackram tas bort innan den faktiska anropsinstruktionen körs.

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 

Fältvärde

Kommentarer

I följande tabell visas instruktionens sammansättningsformat för hexadecimalt och Microsoft mellanliggande språk (MSIL), tillsammans med en kort referenssammanfattning:

Format Sammansättningsformat Description
FE 14 Svans. Efterföljande anrop avslutar aktuella metoder

Det finns inget stackövergångsbeteende som definierats för den här instruktionen.

Prefixinstruktionen tail måste omedelbart föregå en Call, Callieller Callvirt instruktion. Det anger att den aktuella metodens stackram ska tas bort innan anropsinstruktionen körs. Det innebär också att värdet som returneras från följande anrop också är det värde som returneras av den aktuella metoden, och anropet kan därför konverteras till ett korsmetodhopp.

Stacken måste vara tom förutom argumenten som överförs av följande anrop. Instruktionen som följer anropsinstruktionen måste vara en ret. Därför är tail. call den enda giltiga kodsekvensen (eller calli ).callvirt Korrekta instruktioner för Microsoft mellanliggande språk (MSIL) får inte förgrenas till instruktionen call, men de kan förgrenas till följande Ret.

Den aktuella ramen kan inte ignoreras när kontrollen överförs från obetrodd kod till betrodd kod, eftersom detta skulle äventyra kodidentitetssäkerheten. Säkerhetskontrollerna i .NET Framework kan därför göra att tail ignoreras, vilket lämnar en standardinstruktion Call. På samma sätt ignoreras prefixet tail när det används för att avsluta en synkroniserad region för att kunna avsluta en synkroniserad region när anropet returneras.

Följande Emit metodöverlagring kan använda tail opcode:

Gäller för