OpCodes.Calli 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.
Memanggil metode yang ditunjukkan pada tumpukan evaluasi (sebagai penunjuk ke titik masuk) dengan argumen yang dijelaskan oleh konvensi panggilan.
public: static initonly System::Reflection::Emit::OpCode Calli;
public static readonly System.Reflection.Emit.OpCode Calli;
staticval mutable Calli : System.Reflection.Emit.OpCode
Public Shared ReadOnly Calli As OpCode
Nilai Bidang
Keterangan
Tabel berikut mencantumkan format rakitan heksadesimal dan Microsoft Intermediate Language (MSIL) instruksi, bersama dengan ringkasan referensi singkat:
Format | Format Rakitan | Deskripsi |
---|---|---|
29 <T > |
calli callSiteDescr |
Memanggil metode yang ditujukan ke dengan argumen yang dijelaskan oleh konvensi panggilan. |
Perilaku transisi tumpukan, dalam urutan berurutan, adalah:
Argumen metode
arg1
melaluiargN
didorong ke tumpukan.Penunjuk entri metode didorong ke tumpukan.
Argumen metode
arg1
melaluiargN
dan penunjuk entri metode muncul dari tumpukan; panggilan ke metode dilakukan. Setelah selesai, nilai yang dikembalikan dihasilkan oleh metode penerima panggilan dan dikirim ke pemanggil.Nilai yang dikembalikan didorong ke tumpukan.
calli
Instruksi memanggil penunjuk entri metode dengan argumen arg1
melalui argN
. Jenis argumen ini dijelaskan oleh konvensi panggilan tertentu (callSiteDesc
).
calli
Instruksi dapat segera didahului oleh tail
awalan (Tailcall) untuk menentukan bahwa status metode saat ini harus dirilis sebelum mentransfer kontrol. Jika panggilan akan mentransfer kontrol ke metode kepercayaan yang lebih tinggi daripada metode asal, bingkai tumpukan tidak akan dirilis; sebaliknya, eksekusi akan berlanjut secara diam-diam tail
seolah-olah belum disediakan.
Penunjuk entri metode diasumsikan sebagai penunjuk tertentu ke kode asli (dari komputer target) yang dapat dipanggil secara sah dengan argumen yang dijelaskan oleh konvensi panggilan (token metadata untuk tanda tangan yang berdiri sendiri). Penunjuk seperti itu dapat dibuat menggunakan Ldftn instruksi atau Ldvirtftn , atau diteruskan dari kode asli.
Konvensi panggilan tidak diperiksa secara dinamis, sehingga kode yang menggunakan calli
instruksi tidak berfungsi dengan benar jika tujuan tidak benar-benar menggunakan konvensi panggilan yang ditentukan.
Argumen ditempatkan pada tumpukan dalam urutan kiri-ke-kanan. Artinya, argumen pertama dihitung dan ditempatkan pada tumpukan, kemudian argumen kedua, kemudian argumen ketiga, sampai semua argumen yang diperlukan berada di atas tumpukan dalam urutan menurung. Urutan kode pembangun argumen untuk instans atau metode virtual harus mendorong referensi instans tersebut (yang tidak boleh menjadi referensi null) sebelum argumen yang terlihat pengguna.
SecurityException dapat dilemparkan jika keamanan sistem tidak memberikan akses pemanggil ke metode yang dipanggil. Pemeriksaan keamanan dapat terjadi ketika instruksi Microsoft Intermediate Language (MSIL) dikonversi ke kode asli daripada pada runtime.
Metode berikut EmitCalli dapat digunakan untuk melakukan calli
instruksi pada tumpukan. Perhatikan bahwa calli
harus dipanggil melalui metode di bawah ini daripada menggunakan Emit kelas untuk menempatkan instruksi langsung pada tumpukan.
ILGenerator.EmitCalli(OpCode, CallingConventions, Type, Type[], Type[]) untuk panggilan menggunakan konvensi panggilan terkelola.
ILGenerator.EmitCalli(OpCode, CallingConvention, Type, Type[]) untuk panggilan menggunakan konvensi panggilan yang tidak dikelola.