OpCodes.Newobj Feld

Definition

Erstellt ein neues Objekt oder eine neue Instanz eines Werttyps, wobei ein Objektverweis (Typ O) auf dem Auswertungsstapel abgelegt wird.

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 

Feldwert

Hinweise

In der folgenden Tabelle sind das Hexadezimal- und MSIL-Assemblyformat (Microsoft Intermediate Language) der Anweisung sowie eine kurze Referenzzusammenfassung aufgeführt:

Format Assemblyformat BESCHREIBUNG
73 <T> newobj ctor Weist ein nicht initialisiertes Objekt oder werttyp zu und ruft die Konstruktormethode auf ctor.

Das Stapelübergangsverhalten in sequenzieller Reihenfolge lautet:

  1. Argumente arg1 werden argn nacheinander auf den Stapel gepusht.

  2. Argumente argn durch arg1 werden aus dem Stapel geknallt und zur Objekterstellung an ctor übergeben.

  3. Ein Verweis auf das neue Objekt wird auf den Stapel gepusht.

Die newobj Anweisung erstellt ein neues Objekt oder eine neue instance eines Werttyps. Ctor ist ein Metadatentoken (ein methodref oder methoddef , das als Konstruktor gekennzeichnet werden muss), das den Namen, die Klasse und die Signatur des aufzurufenden Konstruktors angibt.

Die newobj -Anweisung weist einen neuen instance der Klasse zu, die der ctor Klasse zugeordnet ist, und initialisiert alle Felder in der neuen instance nach Bedarf auf 0 (des richtigen Typs) oder NULL-Verweise. Anschließend wird der Konstruktor ctor mit den angegebenen Argumenten zusammen mit dem neu erstellten instance aufgerufen. Nachdem der Konstruktor aufgerufen wurde, wird der jetzt initialisierte Objektverweis (Typ O) auf den Stapel gepusht.

Aus sicht des Konstruktors ist das nicht initialisierte Objekt Argument 0, und die anderen Argumente, die an newobj übergeben werden, folgen in der Reihenfolge.

Alle nullbasierten, eindimensionalen Arrays werden mit Newarrerstellt, nicht newobj. Auf der anderen Seite werden alle anderen Arrays (mehr als eine Dimension oder eindimensional, aber nicht nullbasiert) mit newobjerstellt.

Werttypen werden normalerweise nicht mit newobjerstellt. Sie werden in der Regel entweder als Argumente oder lokale Variablen newarr mit (für nullbasierte, eindimensionale Arrays) oder als Felder von Objekten zugeordnet. Nach der Zuordnung werden sie mit Initobjinitialisiert. Die Anweisung kann jedoch verwendet werden, newobj um eine neue instance eines Werttyps auf dem Stapel zu erstellen, der dann als Argument übergeben, in einem lokalen gespeichert werden kann usw.

OutOfMemoryException wird ausgelöst, wenn nicht genügend Arbeitsspeicher vorhanden ist, um die Anforderung zu erfüllen.

MissingMethodException wird ausgelöst, wenn eine Konstruktormethode ctor mit dem angegebenen Namen, der angegebenen Klasse und der Signatur nicht gefunden werden konnte. Dies wird in der Regel erkannt, wenn MSIL-Anweisungen (Microsoft Intermediate Language) nicht zur Laufzeit, sondern in nativen Code konvertiert werden.

Die folgende Emit Methodenüberladung kann den newobj opcode verwenden:

Gilt für: