OpCodes.Newobj Champ
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 :
Les arguments
arg1sontargnenvoyés (push) sur la pile dans la séquence.Les arguments sont extraits
argnde la pile et transmis àctorla création d’objets.arg1Une 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 :