OpCodes.Newobj Champ

Définition

Crée un objet ou une nouvelle instance d’un type valeur, en transmettant une référence d’objet (type O) à la pile d’évaluation.

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 

Valeur de champ

Remarques

Le tableau suivant répertorie le format d'assembly MSIL (Hexadécimal et Microsoft Intermediate Language) de l'instruction, ainsi qu'un bref résumé de référence :

Format Format d’assembly Description
73 <T> newobj ctor Alloue un objet ou un type valeur non initialisé et appelle la méthode ctordu constructeur.

Le comportement transitionnel de la pile, dans l’ordre séquentiel, est :

  1. Les arguments arg1 sont argn envoyés (push) sur la pile dans la séquence.

  2. Les arguments sont extraits argn de la pile et transmis à ctor la création d’objets.arg1

  3. Une référence au nouvel objet est envoyée (push) sur la pile.

L’instruction newobj crée un objet ou une nouvelle instance d’un type valeur. Ctor est un jeton de métadonnées (ou methodrefmethoddef qui doit être marqué comme constructeur) qui indique le nom, la classe et la signature du constructeur à appeler.

L’instruction newobj alloue une nouvelle instance de la classe associée et ctor initialise tous les champs de la nouvelle instance à 0 (du type approprié) ou des références Null selon les besoins. Il appelle ensuite le constructeur ctor avec les arguments donnés ainsi que l’instance nouvellement créée. Une fois le constructeur appelé, la référence d’objet initialisée (type O) est envoyée (push) sur la pile.

Du point de vue du constructeur, l’objet non initialisé est l’argument 0 et les autres arguments passés à newobj suivent dans l’ordre.

Tous les tableaux unidimensionnels basés sur zéro sont créés à l’aide Newarr, et non newobj. En revanche, tous les autres tableaux (plusieurs dimensions, ou une dimension, mais pas de base zéro) sont créés à l’aide newobjde .

Les types valeur ne sont généralement pas créés à l’aide newobjde . Elles sont généralement allouées en tant qu’arguments ou variables locales, à l’aide newarr (pour les tableaux unidimensionnels de base zéro) ou sous forme de champs d’objets. Une fois alloués, ils sont initialisés à l’aide Initobjde . Toutefois, l’instruction newobj peut être utilisée pour créer une instance d’un type valeur sur la pile, qui peut ensuite être passée en tant qu’argument, stockée dans un local, et ainsi de suite.

OutOfMemoryException est levée en cas d’insuffisance de mémoire pour satisfaire la demande.

MissingMethodException est levée si une méthode ctor de constructeur portant le nom, la classe et la signature indiqués sont introuvables. Cela est généralement détecté lorsque Microsoft instructions MSIL (Intermediate Language) sont converties en code natif, plutôt qu’au moment de l’exécution.

La surcharge de méthode suivante Emit peut utiliser l’opcode newobj :

S’applique à