Partager via


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

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

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

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

L’instruction newobj crée un 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 à 0 (du type approprié) ou des références null selon le cas. Il appelle ensuite le constructeur ctor avec les arguments donnés ainsi que le instance nouvellement créé. Une fois le constructeur appelé, la référence d’objet maintenant 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 de base zéro sont créés à l’aide de Newarr, et non newobjde . En revanche, tous les autres tableaux (plusieurs dimensions, ou unidimensionnels, 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 de newobj. Ils sont généralement alloués en tant qu’arguments ou 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 une nouvelle instance d’un type valeur sur la pile, qui peut ensuite être passée en tant qu’argument, stockée dans un local, etc.

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 à