OpCodes.Tailcall Pole
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wykonuje instrukcję wywołania metody postfiksowanej, tak aby ramka stosu bieżącej metody została usunięta przed wykonaniem rzeczywistej instrukcji wywołania.
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
Wartość pola
Uwagi
W poniższej tabeli wymieniono format zestawu szesnastkowy instrukcji i microsoft intermediate language (MSIL) wraz z krótkim podsumowaniem referencyjnym:
Format | Format zestawu | Opis |
---|---|---|
FE 14 | Ogon. | Kolejne wywołanie kończy bieżące metody |
Nie zdefiniowano żadnego zachowania przejścia stosu dla tej instrukcji.
Instrukcja tail
prefiksu musi bezpośrednio poprzedzać instrukcję Call, Callilub Callvirt . Wskazuje, że ramka stosu bieżącej metody powinna zostać usunięta przed wykonaniem instrukcji wywołania. Oznacza to również, że wartość zwrócona z następującego wywołania jest również wartością zwracaną przez bieżącą metodę, a w związku z tym wywołanie może zostać przekonwertowane na przeskok między metodami.
Stos musi być pusty, z wyjątkiem argumentów przesyłanych przez następujące wywołanie. Instrukcja po instrukcji wywołania musi być ponawiana. W związku z tym jedyną prawidłową sekwencją kodu jest tail. call
(lub calli
).callvirt
Poprawne instrukcje języka Microsoft Intermediate Language (MSIL) nie mogą rozgałęziać do call
instrukcji, ale mogą rozgałęzić się do kolejnej Retinstrukcji .
Nie można odrzucić bieżącej ramki, gdy kontrola zostanie przeniesiona z niezaufanego kodu do zaufanego kodu, ponieważ zagroziłoby to bezpieczeństwu tożsamości kodu. W związku z tym kontrole zabezpieczeń .NET Framework mogą spowodować tail
zignorowanie elementu , pozostawiając standardową Call instrukcję. Podobnie, aby umożliwić wyjście zsynchronizowanego regionu po powrocie wywołania, tail
prefiks jest ignorowany podczas zamykania metody oznaczonej jako zsynchronizowana.
Emit Następujące przeciążenie metody może używać tail
kodu opcode: