Esta documentación está archivada y no tiene mantenimiento.

OpCodes.Newobj (Campo)

Actualización: noviembre 2007

Crea un nuevo objeto o una nueva instancia de un tipo de valor e inserta una referencia a objeto (de tipo O) en la pila de evaluación.

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

public static readonly OpCode Newobj
public static final OpCode Newobj
public static final var Newobj : OpCode

En la tabla siguiente, se muestra el ensamblado de la instrucción máquina en formato hexadecimal y en formato de Lenguaje intermedio de Microsoft (MSIL), junto con un breve resumen de referencia:

Formato

Formato del ensamblado

Description

73 < T >

newobj ctor

Asigna un objeto o tipo de valor no inicializado y llama al método constructor ctor.

El comportamiento transicional de la pila es, por orden secuencial:

  1. Los argumentos de arg1 a argn se insertan en la pila por orden.

  2. Los argumentos de argn a arg1 se extraen 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.

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

La instrucción máquina newobj asigna una nueva instancia de la clase asociada a ctor e inicializa todos los campos de la nueva instancia en 0 (del tipo correcto) o en referencias nulas, según corresponda. Después, llama al constructor ctor con los argumentos dados junto con la instancia que acaba de crearse. Una vez que se ha llamado al constructor, la ya inicializada referencia a objeto (de tipo O) se inserta en la pila.

Desde la perspectiva del constructor, el objeto sin inicializar es el argumento 0 y los demás argumentos que se pasan a newobj le siguen, por orden.

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

Los 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. No obstante, se puede utilizar la instrucción máquina newobj para crear una nueva instancia de un tipo de valor en la pila, que después puede pasarse como argumento, almacenarse en una variable local, etc.

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

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

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

  • ILGenerator.Emit(OpCode, ConstructorInfo)

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0
Mostrar: