OpCodes.Newobj Champ

Définition

Crée un nouvel objet ou une nouvelle instance d'un type valeur, en exécutant un push d'une référence d'objet (type O) dans 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 et hexadécimal de l’instruction, ainsi qu’un bref résumé des références :

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 transitoire de la pile, dans l’ordre séquentiel, est le suivant :

  1. Les arguments arg1 sont argn envoyés sur la pile dans l’ordre.

  2. Les arguments via sont extraits argn de la pile et passés à pour la création d’objetctor.arg1

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

L’instruction newobj crée un nouvel objet ou un nouveau instance d’un type valeur. Ctor est un jeton de métadonnées ( methodref ou methoddef 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 ctor à et initialise tous les champs de la nouvelle instance sur 0 (du type approprié) ou les références null le cas échéant. Il appelle ensuite le constructeur ctor avec les arguments donnés ainsi que le instance nouvellement créé. Une fois que le constructeur a été appelé, la référence d’objet maintenant initialisé (type O) est envoyée 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 de base zéro sont créés à l’aide de Newarr, et non de newobj. D’autre part, tous les autres tableaux (plusieurs dimensions, ou unidimensionnels, mais pas de base zéro) sont créés à l’aide newobjde .

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

OutOfMemoryException est levée si la mémoire est insuffisante pour répondre à la demande.

MissingMethodException est levée si une méthode ctor de constructeur avec le nom, la classe et la signature indiqués est introuvable. Cela est généralement détecté lorsque les instructions MSIL (Microsoft 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 à