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
метода может использовать код операции:
Применяется к
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по