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
метода может использовать код операции: