Sdílet prostřednictvím


OpCodes.Tailcall Pole

Definice

Provádí příponu metody volání instrukce tak, že aktuální metoda zásobníku rámec je odstraněna před provedením skutečného volání instrukce.

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 

Hodnota pole

Poznámky

Následující tabulka uvádí šestnáctkový formát sestavení instrukce a formát sestavení MSIL (Microsoft Intermediate Language) spolu se stručným přehledem referencí:

Formát Formát sestavení Description
FE 14 Ocas. Následné volání ukončí aktuální metody.

Pro tuto instrukci není definováno žádné chování přechodu zásobníku.

Instrukce tail předpony musí bezprostředně předcházet instrukcím Call, Callinebo Callvirt . Označuje, že rámec zásobníku aktuální metody by měl být před provedením instrukce volání odebrán. Také to znamená, že hodnota vrácená z následujícího volání je také hodnota vrácená aktuální metodou, a proto volání lze převést na přechod mezi metodami.

Zásobník musí být prázdný s výjimkou argumentů přenášených následujícím voláním. Instrukce následující za pokynem volání musí být ret. Jedinou platnou sekvencí kódu je tail. call tedy (nebo callicallvirt). Správné instrukce jazyka MSIL (Microsoft Intermediate Language) se nesmí rozvětvovat na call instrukci, ale můžou se rozvětvovat na následující Retpříkaz .

Aktuální rámec nelze zahodit při přenosu ovládacího prvku z nedůvěryhodného kódu do důvěryhodného kódu, protože by to ohrozilo zabezpečení identity kódu. Kontroly zabezpečení rozhraní .NET Framework proto mohou způsobit tail ignorování a ponechat standardní Call instrukce. Podobně, aby po návratu volání mohlo dojít k ukončení synchronizované oblasti, tail je předpona ignorována při použití k ukončení metody, která je označena jako synchronizovaná.

Následující Emit přetížení metody může použít tail opcode:

Platí pro