OpCodes.Calli Bidang

Definisi

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:

  1. Argumen metode arg1 melalui argN didorong ke tumpukan.

  2. Penunjuk entri metode didorong ke tumpukan.

  3. Argumen metode arg1 melalui argN 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.

  4. 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.

Berlaku untuk