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 Intermediate Language (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:

適用於