OpCodes.Tailcall Fält
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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: