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 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 ctor du constructeur . |
Le comportement transitionnel de la pile, dans l’ordre séquentiel, est le suivant :
Les arguments via
argn
sont poussésarg1
sur la pile dans l’ordre.Les arguments via
arg1
sont extraitsargn
de la pile et passés àctor
pour la création d’objet.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 newobj
de . En revanche, tous les autres tableaux (plusieurs dimensions, ou unidimensionnels, mais pas de base zéro) sont créés à l’aide newobj
de .
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
: