OpCodes.Tailcall Pole
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Provede příponu volání metody instrukce tak, aby se před spuštěním skutečné instrukce volání odebral rámec zásobníku aktuální metody.
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í jazyka MSIL (Intermediate Language) a Microsoft s stručným přehledem referenčních informací:
| 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 znaku Call, Callinebo Callvirt instrukce. Označuje, že před spuštěním instrukce volání by měl být odebrán rámec zásobníku aktuální metody. Také to znamená, že hodnota vrácená z následujícího volání je také hodnota vrácená aktuální metodou a volání lze proto převést na přeskakování křížové metody.
Zásobník musí být prázdný s výjimkou argumentů přenášených následujícím voláním. Instrukce, která následuje po instrukci volání, musí být ret. Jedinou platnou posloupností kódu je tail. call tedy (nebo callicallvirt ). Správné pokyny jazyka MSIL (Microsoft Intermediate Language) nesmí být větev na call instrukce, ale mohou větvet na následující Ret.
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 tím bylo ohroženo zabezpečení identity kódu. Kontroly zabezpečení .NET Framework proto můžou způsobit ignorování tail a ponechat standardní instrukce Call. Podobně platí, že pokud chcete umožnit ukončení synchronizované oblasti po návratu volání, tail bude předpona ignorována při ukončení metody, která je označena jako synchronizovaná.
Emit Následující přetížení metody může použít tail opcode: