OpCodes.Newobj 欄位
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
建立實值型別的新物件或新執行個體,將物件參考 (型別 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 。 |
堆疊轉換行為依循序順序為:
透過
argn
的arg1
自變數會依序推送在堆疊上。透過的
argn
自變數會從堆疊快顯,並傳遞至ctor
以建立arg1
物件。新物件的參考會推送至堆疊。
指令 newobj
會建立新的物件或實值型別的新實例。
Ctor
是 (或 methoddef
的methodref
元數據令牌,必須標示為建構函式) ,指出要呼叫之建構函式的名稱、類別和簽章。
指令 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: