OpCodes.Tailcall Bidang
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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: