OpCodes.Tailcall Поле

Определение

Выполняет инструкцию вызова послефиксированного метода, чтобы кадр стека текущего метода был удален до выполнения фактической инструкции вызова.

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 

Значение поля

Комментарии

В следующей таблице перечислены шестнадцатеричные и шестнадцатеричные и Microsoft формат сборки промежуточного языка (MSIL) инструкции, а также краткая сводка по ссылке:

Формат Формат сборки Description
FE 14 Хвост. Последующий вызов завершает текущие методы

Для этой инструкции не определено поведение перехода стека.

Инструкция tail префикса должна немедленно предшествовать CallCalliинструкции или Callvirt инструкции. Он указывает, что кадр стека текущего метода следует удалить перед выполнением инструкции вызова. Это также означает, что значение, возвращаемое из следующего вызова, также является значением, возвращаемым текущим методом, и вызов может быть преобразован в перекрестный переход.

Стек должен быть пустым, за исключением аргументов, передаваемых следующим вызовом. Инструкция, следующая за инструкцией вызова, должна быть повтором. Таким образом, единственной допустимой последовательностью кода является tail. call (илиcalli).callvirt Правильные инструкции Microsoft промежуточного языка (MSIL) не должны ветвляться в инструкцию call, но они могут ветвляться в последующий Ret.

Текущий кадр нельзя отменить при передаче элемента управления из ненадежного кода в доверенный код, так как это приведет к угрозе безопасности идентификации кода. Поэтому проверки безопасности .NET Framework могут привести к тому, что tail игнорироваться, оставляя стандартную инструкцию Call. Аналогичным образом, чтобы разрешить выход синхронизированной области после возврата вызова, tail префикс игнорируется при выходе из метода, помеченного как синхронизированный.

Следующая Emit перегрузка метода может использовать tail код opcode:

Применяется к