Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Campo OpCodes.Newobj

 

Publicado: octubre de 2016

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).

Espacio de nombres:   System.Reflection.Emit
Ensamblado:  mscorlib (en mscorlib.dll)

public static readonly OpCode Newobj

Valor de campo

Type: System.Reflection.Emit.OpCode

En la tabla siguiente se muestra la instrucción hexadecimal y formato de ensamblado de 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 objeto o valor no inicializado y llama al método constructor ctor.

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

  1. Argumentos arg1 a través de argn se insertan en la pila por orden.

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

  3. Una referencia al nuevo objeto se inserta en la pila.

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

El newobj instrucción asigna una nueva instancia de la clase asociada ctor e inicializa todos los campos de la nueva instancia en 0 (del tipo correcto) o referencias nulas, según corresponda. A continuación, llama al constructor ctor con los argumentos dados junto con la instancia recién creada. Después de llamar al constructor, ahora inicializado la referencia a objeto (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 que se pasan a newobj le siguen en orden.

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

Tipos de valor no suelen crearse mediante newobj. Normalmente, se asignan como argumentos o variables locales, mediante newarr (para las matrices unidimensionales de base cero), o como campos de objetos. Una vez asignados, se inicializan mediante Initobj. Sin embargo, la newobj instrucción puede utilizarse para crear una nueva instancia de un tipo de valor en la pila, que después puede pasarse como argumento, almacenado en una variable local y así sucesivamente.

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

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

La siguiente Emit sobrecarga del método se puede utilizar la newobj código de operación:

  • ILGenerator.Emit (código de operación, ConstructorInfo)

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.1
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: