Bagikan melalui


OpCodes.Newobj Bidang

Definisi

Membuat objek baru atau instans baru dari jenis nilai, mendorong referensi objek (jenis O) ke tumpukan evaluasi.

public: static initonly System::Reflection::Emit::OpCode Newobj;
public static readonly System.Reflection.Emit.OpCode Newobj;
 staticval mutable Newobj : System.Reflection.Emit.OpCode
Public Shared ReadOnly Newobj 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
73 <T> newobj ctor Mengalokasikan objek atau jenis nilai yang tidak diinisialisasi dan memanggil metode ctorkonstruktor .

Perilaku transisi tumpukan, dalam urutan berurutan, adalah:

  1. arg1 Argumen melalui argn didorong pada tumpukan secara berurutan.

  2. argn Argumen melalui arg1 muncul dari tumpukan dan diteruskan ke ctor untuk pembuatan objek.

  3. Referensi ke objek baru didorong ke tumpukan.

newobj Instruksi membuat objek baru atau instans baru dari jenis nilai. Ctor adalah token metadata ( methodref atau methoddef yang harus ditandai sebagai konstruktor) yang menunjukkan nama, kelas, dan tanda tangan konstruktor untuk dipanggil.

newobj Instruksi mengalokasikan instans baru kelas yang terkait dengan ctor dan menginisialisasi semua bidang dalam instans baru ke 0 (dari jenis yang tepat) atau referensi null yang sesuai. Kemudian memanggil konstruktor ctor dengan argumen yang diberikan bersama dengan instans yang baru dibuat. Setelah konstruktor dipanggil, referensi objek yang sekarang diinisialisasi (jenis O) didorong pada tumpukan.

Dari sudut pandang konstruktor, objek yang tidak diinisialisasi adalah argumen 0 dan argumen lain yang diteruskan ke newobj mengikuti secara berurutan.

Semua array satu dimensi berbasis nol dibuat menggunakan Newarr, bukan newobj. Di sisi lain, semua array lain (lebih dari satu dimensi, atau satu dimensi tetapi tidak berbasis nol) dibuat menggunakan newobj.

Jenis nilai biasanya tidak dibuat menggunakan newobj. Mereka biasanya dialokasikan baik sebagai argumen atau variabel lokal, menggunakan newarr (untuk array berbasis nol, satu dimensi), atau sebagai bidang objek. Setelah dialokasikan, mereka diinisialisasi menggunakan Initobj. Namun, newobj instruksi dapat digunakan untuk membuat instans baru dari jenis nilai pada tumpukan, yang kemudian dapat diteruskan sebagai argumen, disimpan dalam lokal, dan sebagainya.

OutOfMemoryException dilemparkan jika tidak ada cukup memori untuk memenuhi permintaan.

MissingMethodException dilemparkan jika metode ctor konstruktor dengan nama, kelas, dan tanda tangan yang ditunjukkan tidak dapat ditemukan. Ini biasanya terdeteksi ketika instruksi Microsoft Intermediate Language (MSIL) dikonversi ke kode asli, bukan pada runtime.

Metode berikut Emit kelebihan beban dapat menggunakan newobj opcode:

Berlaku untuk