OpCodes.Newobj OpCodes.Newobj OpCodes.Newobj OpCodes.Newobj Field

定義

新しいオブジェクトまたは値型の新しいインスタンスを作成し、オブジェクト参照 (O 型) を評価スタックにプッシュします。Creates a new object or a new instance of a value type, pushing an object reference (type O) onto the evaluation stack.

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 

フィールド値

注釈

次の表は、命令の16進形式と Microsoft 中間言語 (MSIL) のアセンブリ形式と、簡単なリファレンスの概要を示しています。The following table lists the instruction's hexadecimal and Microsoft Intermediate Language (MSIL) assembly format, along with a brief reference summary:

形式Format アセンブリ形式Assembly Format 説明Description
73 < T >73 < T > newobjctornewobj ctor 初期化されていないオブジェクトまたは値型ctorを割り当て、コンストラクターメソッドを呼び出します。Allocates an uninitialized object or value type and calls the constructor method ctor.

スタックの移行動作は、次の順序で実行されます。The stack transitional behavior, in sequential order, is:

  1. arg1 からargnの引数は、順番にスタックにプッシュされます。Arguments arg1 through argn are pushed on the stack in sequence.

  2. からargn ctorの引数はスタックからポップされ、オブジェクトの作成のためにに渡されます。 arg1Arguments argn through arg1 are popped from the stack and passed to ctor for object creation.

  3. 新しいオブジェクトへの参照がスタックにプッシュされます。A reference to the new object is pushed onto the stack.

命令newobjは、新しいオブジェクトまたは値型の新しいインスタンスを作成します。The newobj instruction creates a new object or a new instance of a value type. Ctorは、呼び出すコンストラクターの名前methodrefmethoddefクラス、およびシグネチャを示すメタデータトークン (またはコンストラクターとしてマークされる必要がある) です。Ctor is a metadata token (a methodref or methoddef that must be marked as a constructor) that indicates the name, class and signature of the constructor to call.

命令newobjは、に関連付けられたクラスのctor新しいインスタンスを割り当て、新しいインスタンス内のすべてのフィールドを 0 (適切な型の) または null 参照 (適切な場合) に初期化します。The newobj instruction allocates a new instance of the class associated with ctor and initializes all the fields in the new instance to 0 (of the proper type) or null references as appropriate. 次に、新しく作成ctorされたインスタンスと共に、指定された引数を使用してコンストラクターを呼び出します。It then calls the constructor ctor with the given arguments along with the newly created instance. コンストラクターが呼び出されると、現在初期化されているオブジェクト参照O(型) がスタックにプッシュされます。After the constructor has been called, the now initialized object reference (type O) is pushed on the stack.

コンストラクターの観点からは、初期化されていないオブジェクトは引数0であり、newobj に渡される他の引数は順に続きます。From the constructor's point of view, the uninitialized object is argument 0 and the other arguments passed to newobj follow in order.

0から始まるすべての1次元配列は、ではNewarrなくnewobj、を使用して作成されます。All zero-based, one-dimensional arrays are created using Newarr, not newobj. 一方、を使用してnewobj、他のすべての配列 (複数の次元、または1次元であるが0から始まらない配列) が作成されます。On the other hand, all other arrays (more than one dimension, or one-dimensional but not zero-based) are created using newobj.

値型は、通常はをnewobj使用して作成されません。Value types are not usually created using newobj. 通常、これらは引数またはローカル変数としてnewarr 、(0 から始まる、1次元の配列の場合)、またはオブジェクトのフィールドとして割り当てられます。They are usually allocated either as arguments or local variables, using newarr (for zero-based, one-dimensional arrays), or as fields of objects. 割り当てられると、を使用Initobjして初期化されます。Once allocated, they are initialized using Initobj. ただし、 newobj命令を使用して、スタック上に値型の新しいインスタンスを作成し、そのインスタンスを引数として渡したり、ローカルに格納したりすることができます。However, the newobj instruction can be used to create a new instance of a value type on the stack, that can then be passed as an argument, stored in a local, and so on.

OutOfMemoryException要求を満たすのに十分なメモリがない場合は、がスローされます。OutOfMemoryException is thrown if there is insufficient memory to satisfy the request.

MissingMethodExceptionは、指定されたctor名前、クラス、およびシグネチャを持つコンストラクターメソッドが見つからない場合にスローされます。MissingMethodException is thrown if a constructor method ctor with the indicated name, class and signature could not be found. これは通常、Microsoft 中間言語 (MSIL) 命令が実行時ではなくネイティブコードに変換された場合に検出されます。This is typically detected when Microsoft Intermediate Language (MSIL) instructions are converted to native code, rather than at runtime.

Emitのメソッドオーバーロードでは、 newobjオペコードを使用できます。The following Emit method overload can use the newobj opcode:

  • ILGenerator (オペコード, ConstructorInfo)ILGenerator.Emit(OpCode, ConstructorInfo)

適用対象