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
Значение поля
Комментарии
В следующей таблице приведен шестнадцатеричный формат инструкции и формат сборки MSIL, а также краткая справочная сводка:
| Формат | Формат сборки | Описание |
|---|---|---|
73 <T> |
newobj ctor |
Выделяет неинициализированный объект или тип значения и вызывает метод ctorконструктора . |
Переходный режим стека в последовательном порядке:
Аргументы
arg1доargnпередаются в стек последовательно.Аргументы
argnчерезarg1выскочат из стека и передаютсяctorв для создания объекта.Ссылка на новый объект помещается в стек.
Инструкция newobj создает новый объект или новый экземпляр типа значения.
Ctor — это маркер метаданных ( methodref или methoddef , который должен быть помечен как конструктор), указывающий имя, класс и сигнатуру вызываемого конструктора.
Инструкция newobj выделяет новый экземпляр класса , связанного с ctor , и инициализирует все поля в новом экземпляре 0 (соответствующего типа) или пустыми ссылками при необходимости. Затем он вызывает конструктор ctor с заданными аргументами вместе с вновь созданным экземпляром. После вызова конструктора теперь инициализированная ссылка на объект (тип O) передается в стек.
С точки зрения конструктора неинициализированный объект является аргументом 0, а остальные аргументы, передаваемые в newobj, следуют по порядку.
Все одномерные массивы с нуля создаются с помощью Newarr, а не newobj. С другой стороны, все остальные массивы (более одного измерения или одномерные, но не отсчитываемые от нуля) создаются с помощью newobj.
Типы значений обычно не создаются с помощью newobj. Обычно они выделяются как аргументы или локальные переменные с использованием newarr (для отсчитываемых от нуля одномерных массивов) или как поля объектов. После выделения они инициализируются с помощью Initobj. Однако инструкцию newobj можно использовать для создания нового экземпляра типа значения в стеке, который затем можно передать в качестве аргумента, сохранить в локальной среде и т. д.
OutOfMemoryException возникает, если недостаточно памяти для удовлетворения запроса.
MissingMethodException возникает, если не удалось найти метод ctor конструктора с указанным именем, классом и сигнатурой. Обычно это обнаруживается при преобразовании инструкций MSIL в машинный код, а не во время выполнения.
Emit Следующая перегрузка newobj метода может использовать код операции: