Bagikan melalui


OpCodes.Tailcall Bidang

Definisi

Melakukan instruksi panggilan metode postfixed sehingga bingkai tumpukan metode saat ini dihapus sebelum instruksi panggilan aktual dijalankan.

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 

Nilai Bidang

Keterangan

Tabel berikut mencantumkan format rakitan heksadesimal instruksi dan Microsoft Intermediate Language (MSIL), bersama dengan ringkasan referensi singkat:

Format Format Rakitan Deskripsi
FE 14 Ekor. Panggilan berikutnya mengakhiri metode saat ini

Tidak ada perilaku transisi tumpukan yang ditentukan untuk instruksi ini.

Instruksi tail awalan harus segera mendahului Callinstruksi , , Calliatau Callvirt . Ini menunjukkan bahwa bingkai tumpukan metode saat ini harus dihapus sebelum instruksi panggilan dijalankan. Ini juga menyiratkan bahwa nilai yang dikembalikan dari panggilan berikut juga merupakan nilai yang dikembalikan oleh metode saat ini, dan oleh karena itu panggilan dapat dikonversi menjadi lompatan lintas metode.

Tumpukan harus kosong kecuali untuk argumen yang ditransfer oleh panggilan berikut. Instruksi yang mengikuti instruksi panggilan harus berupa ret. Dengan demikian satu-satunya urutan kode yang valid adalah tail. call (atau calli atau callvirt). Instruksi Microsoft Intermediate Language (MSIL) yang benar tidak boleh bercabang pada call instruksi, tetapi mereka dapat bercabang ke Retberikutnya.

Bingkai saat ini tidak dapat dibuang ketika kontrol ditransfer dari kode yang tidak tepercaya ke kode tepercaya, karena ini akan membahayakan keamanan identitas kode. Oleh karena itu, pemeriksaan keamanan .NET Framework dapat menyebabkan tail diabaikan, meninggalkan instruksi standarCall. Demikian pula, untuk memungkinkan keluarnya wilayah yang disinkronkan terjadi setelah panggilan kembali, tail awalan diabaikan ketika digunakan untuk keluar dari metode yang ditandai disinkronkan.

Metode berikut Emit kelebihan beban dapat menggunakan tail opcode:

Berlaku untuk