Freigeben über


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 Ordnet ein nicht initialisiertes Objekt oder einen Werttyp zu und ruft die Konstruktormethode auf ctor.

Das Übergangsverhalten des Stapels in sequenzieller Reihenfolge lautet:

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

  2. Argumente argn durch arg1 werden aus dem Stapel geploppt 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 markiert werden muss), das den Namen, die Klasse und die Signatur des aufzurufenden Konstruktors angibt.

Die newobj -Anweisung ordnet eine neue instance der zugeordneten Klasse zu ctor und initialisiert alle Felder in der neuen instance nach Bedarf bis 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 an newobj übergebenen Argumente folgen der Reihenfolge.

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

Werttypen werden in der Regel nicht mit newobjerstellt. Sie werden in der Regel entweder als Argumente oder lokale Variablen mit newarr (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 im 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 angegebenen 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: