Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erstellt ein neues Objekt oder eine neue Instanz eines Werttyps, wobei ein Objektverweis (Typ O) auf dem Auswertungsstapel abgelegt wird.
Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Public Shared ReadOnly Newobj As OpCode
'Usage
Dim value As OpCode
value = OpCodes.Newobj
public static readonly OpCode Newobj
public:
static initonly OpCode Newobj
public static final OpCode Newobj
public static final var Newobj : OpCode
Hinweise
In der folgenden Tabelle werden das hexadezimale und das Assemblyformat der MSIL (Microsoft Intermediate Language) jeweils mit einer Kurzreferenz aufgeführt:
Format |
Assemblyformat |
Beschreibung |
|---|---|---|
73 < T > |
newobj ctor |
Reserviert ein nicht initialisiertes Objekt oder einen Werttyp und ruft die Konstruktormethode ctor auf. |
Im Stapel laufen die folgenden Aktionen in der angegebenen Reihenfolge ab:
Die Argumente arg1 bis argn werden der Reihe nach auf dem Stapel abgelegt.
Die Argumente argn bis arg1 werden vom Stapel geholt und zum Erstellen eines Objekts an ctor übergeben.
Ein Verweis auf das neue Objekt wird auf dem Stapel abgelegt.
Die newobj-Anweisung erstellt ein neues Objekt oder eine neue Instanz eines Werttyps. Ctor ist ein Metadatentoken (methodref oder methoddef, das als Konstruktor gekennzeichnet werden muss), das Namen, Klasse und Signatur des aufzurufenden Konstruktors angibt.
Die newobj-Anweisung reserviert eine neue Instanz der ctor zugeordneten Klasse und initialisiert alle Felder in der neuen Instanz mit dem Wert 0 (des entsprechenden Typs) oder ggf. mit NULL-Verweisen. Anschließend ruft sie den Konstruktor ctor mit den angegebenen Argumenten zusammen mit der neu erstellten Instanz auf. Nach dem Aufruf des Konstruktors wird der nun initialisierte Objektverweis (Typ O) auf dem Stapel abgelegt.
Aus der Sicht des Konstruktors ist das nicht initialisierte Objekt das Argument 0, gefolgt von den weiteren an newobj übergebenen Argumenten in der entsprechenden Reihenfolge.
Alle nullbasierten, eindimensionalen Arrays werden mit Newarr und nicht mit newobj erstellt. Im Unterschied dazu werden alle anderen Arrays (mehrdimensionale oder eindimensionale, die nicht nullbasiert sind) mit newobj erstellt.
Werttypen werden i. d. R. nicht mit newobj erstellt. Sie werden normalerweise als Argumente oder lokale Variablen mit newarr (für nullbasierte, eindimensionale Arrays) oder als Felder von Objekten reserviert. Nach der Reservierung werden sie mit Initobj initialisiert. Mit der newobj-Anweisung kann jedoch eine neue Instanz eines Werttyps im Stapel erstellt werden, die anschließend als Argument übergeben und in einer lokalen Variablen gespeichert werden kann usw.
OutOfMemoryException wird ausgelöst, wenn für die Verarbeitung der Anforderung nicht genügend Speicher vorhanden ist.
Wenn eine Konstruktormethode ctor mit dem angegebenen Namen, der angegebenen Klasse und der angegebenen Signatur nicht gefunden wird, wird MissingMethodException ausgelöst. Dies wird normalerweise nicht zur Laufzeit erkannt, sondern wenn MSIL (Microsoft Intermediate Language)-Anweisungen in systemeigenen Code konvertiert werden.
Die folgende Überladung der Emit-Methode verwendet den newobj-Opcode:
- ILGenerator.Emit(OpCode, ConstructorInfo)
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
OpCodes-Klasse
OpCodes-Member
System.Reflection.Emit-Namespace