Поделиться через


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конструктора .

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

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

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

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

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

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

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

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

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

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

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

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

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