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 Intermediate Language (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:
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應