OpCodes.Newobj Feld
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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:
Argumente
arg1
durchargn
werden nacheinander auf den Stapel gepusht.Argumente
argn
durcharg1
werden aus dem Stapel geploppt und zur Objekterstellung anctor
übergeben.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 newobj
mit . Auf der anderen Seite werden alle anderen Arrays (mehr als eine Dimension oder eindimensional, aber nicht nullbasiert) mit newobj
erstellt.
Werttypen werden in der Regel nicht mit newobj
erstellt. 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: