OpCodes.Newobj 欄位

定義

建立實值型別的新物件或新執行個體,將物件參考 (型別 O) 推入至評估堆疊。

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 

欄位值

備註

下表列出指令的十六進位和 Microsoft 中繼語言 (MSIL) 元件格式,以及簡短的參考摘要:

格式 元件格式 Description
73 <T> newobj ctor 設定未初始化的物件或實值型別,並呼叫建構函式方法 ctor

堆疊轉換行為依循序順序為:

  1. 透過 argnarg1自變數會依序推送在堆疊上。

  2. 透過的argn自變數會從堆疊快顯,並傳遞至 ctor 以建立arg1物件。

  3. 新物件的參考會推送至堆疊。

指令 newobj 會建立新的物件或實值型別的新實例。 Ctor是 (或 methoddefmethodref元數據令牌,必須標示為建構函式) ,指出要呼叫之建構函式的名稱、類別和簽章。

指令 newobj 會配置與 相關聯 ctor 之 類別的新實例,並將新實例中的所有欄位初始化為適當類型) 或 null 參考的 0 (。 然後,它會使用指定的自變數以及新建立的實例呼叫建構函 ctor 式。 呼叫建構函式之後,現在初始化的對象參考 (類型 O) 會在堆疊上推送。

從建構函式的觀點來看,未初始化的對像是自變數 0,而傳遞至 newobj 的其他自變數會依序執行。

所有以零起始的一維陣列都會使用 Newarr建立,而不是 newobj。 另一方面,所有其他陣列 (一個以上的維度,或是一維而非以零起始的) 會使用 newobj來建立。

通常不會使用 newobj來建立實值型別。 它們通常會配置為自變數或局部變數,針對以零起始、一維陣列) 或作為物件的欄位使用 newarr (。 配置之後,會使用 Initobj初始化它們。 不過, newobj 指令可用來在堆疊上建立實值型別的新實例,然後可以傳遞為自變數、儲存在本機等等。

OutOfMemoryException 如果記憶體不足而無法滿足要求,則會擲回 。

MissingMethodException 如果找不到具有指定名稱、類別和簽章的建構函式方法 ctor ,則會擲回 。 當 Microsoft Intermediate Language (MSIL) 指令轉換成機器碼,而不是在運行時間時,通常會偵測到此情況。

下列 Emit 方法多載可以使用 newobj opcode:

適用於