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 формат сборки промежуточного языка (MSIL) инструкции, а также краткая сводка по ссылке:

Формат Формат сборки Description
73 <T> newobj ctor Выделяет неинициализированный объект или тип значения и вызывает метод ctorконструктора.

Переходное поведение стека в последовательном порядке:

  1. Аргументы arg1argn передаются в стек в последовательности.

  2. Аргументы argnarg1 передаются из стека и передаются ctor для создания объекта.

  3. Ссылка на новый объект передается в стек.

Инструкция newobj создает новый объект или новый экземпляр типа значения. Ctor — это маркер метаданных (или methodrefmethoddef который должен быть помечен как конструктор), указывающий имя, класс и подпись вызываемого конструктора.

Инструкция newobj выделяет новый экземпляр класса, связанного с ctor ним, и инициализирует все поля в новом экземпляре до 0 (соответствующего типа) или null ссылок соответствующим образом. Затем он вызывает конструктор ctor с заданными аргументами вместе с вновь созданным экземпляром. После вызова конструктора в стеке отправляется ссылка на инициализированный объект (тип O).

С точки зрения конструктора неинициализированный объект имеет аргумент 0, а другие аргументы, переданные в newobj, следуют по порядку.

Все отсчитываемые от нуля одномерные массивы создаются с помощью Newarr, а не newobj. С другой стороны, все остальные массивы (несколько измерений или одномерные, но не от нуля) создаются с помощью newobj.

Типы значений обычно не создаются с помощью newobj. Обычно они выделяются как аргументы или локальные переменные, используя newarr (для одномерных массивов) или в виде полей объектов. После выделения они инициализируются с помощью Initobj. newobj Однако инструкцию можно использовать для создания нового экземпляра типа значения в стеке, который затем можно передать в качестве аргумента, хранящегося в локальном и т. д.

OutOfMemoryException вызывается, если недостаточно памяти для удовлетворения запроса.

MissingMethodException вызывается, если не удалось найти метод ctor конструктора с указанным именем, классом и сигнатурой. Обычно это обнаруживается при преобразовании инструкций Microsoft промежуточного языка (MSIL) в машинный код, а не во время выполнения.

Следующая Emit перегрузка метода может использовать newobj код opcode:

Применяется к