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конструктора. |
Переходное поведение стека в последовательном порядке:
Аргументы
arg1argnпередаются в стек в последовательности.Аргументы
argnarg1передаются из стека и передаютсяctorдля создания объекта.Ссылка на новый объект передается в стек.
Инструкция 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: