OpCodes.Newobj Feld

Definition

Erstellt ein neues Objekt oder eine neue Instanz eines Werttyps, wobei ein Objektverweis (Typ O) auf den Auswertungsstapel verschoben 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 Microsoft MSIL-Assemblyformat (Intermediate Language) der Anweisung zusammen mit einer kurzen Referenzzusammenfassung aufgeführt:

Format Assemblyformat Description
73 <T> newobj ctor Weist ein nicht initialisiertes Objekt oder einen Werttyp zu und ruft die Konstruktormethode ctorauf.

Das Übergangsverhalten des Stapels in sequenzieller Reihenfolge lautet:

  1. argn Argumente arg1 durchlaufen werden auf dem Stapel in Sequenz verschoben.

  2. arg1 Die durchgestrichenen Argumente argn werden aus dem Stapel angezeigt und zur ctor Objekterstellung übergeben.

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

Mit der newobj Anweisung wird ein neues Objekt oder eine neue Instanz eines Werttyps erstellt. Ctor ist ein Metadatentoken (ein methodref oder methoddef muss als Konstruktor gekennzeichnet werden), der den Namen, die Klasse und signatur des aufrufenden Konstruktors angibt.

Die newobj Anweisung weist eine neue Instanz der klasse zu ctor und initialisiert alle Felder in der neuen Instanz nach Bedarf auf 0 (des richtigen Typs) oder NULL-Verweise. Anschließend wird der Konstruktor ctor mit den angegebenen Argumenten zusammen mit der neu erstellten Instanz aufgerufen. Nachdem der Konstruktor aufgerufen wurde, wird der nun initialisierte Objektverweis (Typ O) auf den Stapel verschoben.

Aus der 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 und nicht newobjerstelltNewarr. Andererseits werden alle anderen Arrays (mehrere Dimensionen oder eindimensionale, aber nicht nullbasierte) erstellt newobj.

Werttypen werden in der Regel nicht mithilfe von newobj. Sie werden in der Regel entweder als Argumente oder lokale Variablen zugewiesen, wobei newarr sie (für nullbasierte, eindimensionale Arrays) oder als Objektefelder verwendet werden. Nach der Zuordnung werden sie mithilfe von Initobj. Die Anweisung kann jedoch verwendet werden, newobj um eine neue Instanz eines Werttyps auf dem Stapel zu erstellen, die dann als Argument übergeben werden kann, das in einem lokalen Usw. gespeichert ist.

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 Klasse und der Signatur nicht gefunden werden konnte. Dies wird in der Regel erkannt, wenn Microsoft MSIL-Anweisungen (Intermediate Language) nicht zur Laufzeit, sondern in systemeigenen Code konvertiert werden.

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

Gilt für: