Udostępnij za pośrednictwem


OpCodes.Tailcall Pole

Definicja

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:

Dotyczy