다음을 통해 공유


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 

필드 값

설명

다음 표에는 간단한 참조 요약과 함께 명령의 16진수 및 MSIL(Microsoft Intermediate Language) 어셈블리 형식이 나와 있습니다.

서식 어셈블리 형식 Description
73 <T> newobj ctor 초기화되지 않은 개체 또는 값 형식을 할당하고 생성자 메서드 ctor를 호출합니다.

스택 전환 동작은 순차적으로 다음과 같습니다.

  1. 인수 arg1 를 통해 argn 스택에 순서대로 푸시됩니다.

  2. 인수 argnarg1 스택에서 팝되고 개체 만들기를 위해 에 ctor 전달됩니다.

  3. 새 개체에 대한 참조가 스택에 푸시됩니다.

명령은 newobj 새 개체 또는 값 형식의 새 instance 만듭니다. Ctor 는 호출할 생성자의 이름, 클래스 및 서명을 나타내는 메타데이터 토큰( methodrefmethoddef 또는 생성자로 표시되어야 합니다)입니다.

newobj 명령은 연결된 ctor 클래스의 새 instance 할당하고 새 instance 모든 필드를 적절한 형식의 0 또는 null 참조로 적절하게 초기화합니다. 그런 다음, 새로 만든 instance 함께 지정된 인수를 사용하여 생성자를 ctor 호출합니다. 생성자가 호출된 후 이제 초기화된 개체 참조(형식 O)가 스택에 푸시됩니다.

생성자의 관점에서 초기화되지 않은 개체는 인수 0이고 newobj에 전달된 다른 인수는 순서대로 따릅니다.

모든 0부터 시작하는 1차원 배열은 가 아닌 newobj를 사용하여 Newarr만들어집니다. 반면에 다른 모든 배열(둘 이상의 차원 또는 1차원이지만 0부터 시작하지 않음)은 를 사용하여 newobj만들어집니다.

값 형식은 일반적으로 를 사용하여 newobj만들어지지 않습니다. 일반적으로 인수 또는 지역 변수로 할당되거나( newarr 0부터 시작하는 1차원 배열의 경우) 또는 개체 필드로 할당됩니다. 할당되면 를 사용하여 Initobj초기화됩니다. 그러나 newobj 명령을 사용하여 스택에 값 형식의 새 instance 만든 다음 인수로 전달되고 로컬에 저장될 수 있습니다.

OutOfMemoryException 는 요청을 충족할 메모리가 부족한 경우 throw됩니다.

MissingMethodException 지정된 이름, 클래스 및 서명을 가진 생성자 메서드 ctor 를 찾을 수 없는 경우 throw됩니다. 일반적으로 MSIL(Microsoft Intermediate Language) 명령이 런타임이 아닌 네이티브 코드로 변환될 때 검색됩니다.

다음 Emit 메서드 오버로드는 opcode를 newobj 사용할 수 있습니다.

적용 대상