Compartir vía


OpCodes.Newobj Campo

Definición

Crea un nuevo objeto o una nueva instancia de un tipo de valor e inserta en la pila de evaluación una referencia a objeto (de tipo 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 

Valor de campo

Comentarios

En la tabla siguiente se muestra el formato de ensamblado hexadecimal y lenguaje intermedio de Microsoft (MSIL), junto con un breve resumen de referencia:

Formato Formato de ensamblado Descripción
73 <T> newobj ctor Asigna un tipo de valor o un objeto no inicializado y llama al método ctorconstructor .

El comportamiento de transición de pila, en orden secuencial, es:

  1. Los argumentos arg1 a través argn se insertan en la pila en secuencia.

  2. Los argumentos argn a través arg1 se extrae de la pila y se pasan a ctor para la creación de objetos.

  3. Se inserta una referencia al nuevo objeto en la pila.

La newobj instrucción crea un nuevo objeto o una nueva instancia de un tipo de valor. Ctor es un token de metadatos (o methodrefmethoddef que debe marcarse como constructor) que indica el nombre, la clase y la firma del constructor que se va a llamar.

La newobj instrucción asigna una nueva instancia de la clase asociada ctor a e inicializa todos los campos de la nueva instancia en 0 (del tipo adecuado) o referencias nulas según corresponda. A continuación, llama al constructor ctor con los argumentos especificados junto con la instancia recién creada. Después de llamar al constructor, la referencia de objeto inicializada (tipo O) se inserta en la pila.

Desde el punto de vista del constructor, el objeto sin inicializar es el argumento 0 y los demás argumentos pasados a newobj siguen en orden.

Todas las matrices unidimensionales basadas en cero se crean mediante Newarr, no newobj. Por otro lado, todas las demás matrices (más de una dimensión o unidimensional pero no basadas en cero) se crean mediante newobj.

Normalmente, los tipos de valor no se crean con newobj. Normalmente se asignan como argumentos o variables locales, mediante newarr (para matrices unidimensionales de base cero) o como campos de objetos. Una vez asignados, se inicializan mediante Initobj. Sin embargo, la newobj instrucción se puede usar para crear una nueva instancia de un tipo de valor en la pila, que luego se puede pasar como un argumento, almacenarse en un local, etc.

OutOfMemoryException se produce si no hay memoria suficiente para satisfacer la solicitud.

MissingMethodException se produce si no se encontró un método ctor constructor con el nombre indicado, la clase y la firma. Esto suele detectarse cuando las instrucciones del lenguaje intermedio de Microsoft (MSIL) se convierten en código nativo, en lugar de en tiempo de ejecución.

La sobrecarga del método siguiente Emit puede usar el newobj código de operación:

Se aplica a