OpCodes.Newobj Fält

Definition

Skapar ett nytt objekt eller en ny instans av en värdetyp och push-överför en objektreferens (typ O) till utvärderingsstacken.

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 

Fältvärde

Kommentarer

I följande tabell visas instruktionens sammansättningsformat för hexadecimalt och Microsoft mellanliggande språk (MSIL), tillsammans med en kort referenssammanfattning:

Format Sammansättningsformat Description
73 <T> newobj ctor Allokerar ett onitialiserat objekt eller en värdetyp och anropar konstruktormetoden ctor.

Stackens övergångsbeteende i sekventiell ordning är:

  1. Argumenten arg1 skickas på argn stacken i följd.

  2. Argument argn genom arg1 poppas från stacken och skickas till för att ctor skapa objekt.

  3. En referens till det nya objektet skickas till stacken.

Instruktionen newobj skapar ett nytt objekt eller en ny instans av en värdetyp. Ctor är en metadatatoken (en methodref eller methoddef som måste markeras som en konstruktor) som anger namnet, klassen och signaturen för konstruktorn som ska anropas.

Instruktionen newobj allokerar en ny instans av klassen som är associerad med ctor och initierar alla fält i den nya instansen till 0 (av rätt typ) eller null-referenser efter behov. Den anropar sedan konstruktorn ctor med de angivna argumenten tillsammans med den nyligen skapade instansen. När konstruktorn har anropats pushas den nu initierade objektreferensen (typ O) på stacken.

Från konstruktorns synvinkel är det onitialiserade objektet argument 0 och de andra argumenten som skickas till newobj följer i ordning.

Alla nollbaserade, endimensionella matriser skapas med , Newarrinte newobj. Å andra sidan skapas alla andra matriser (mer än en dimension eller endimensionella men inte nollbaserade) med hjälp av newobj.

Värdetyper skapas vanligtvis inte med .newobj De allokeras vanligtvis antingen som argument eller lokala variabler, med hjälp av newarr (för nollbaserade, endimensionella matriser) eller som fält för objekt. När de har allokerats initieras de med .Initobj Instruktionen newobj kan dock användas för att skapa en ny instans av en värdetyp i stacken, som sedan kan skickas som ett argument, lagras i en lokal och så vidare.

OutOfMemoryException genereras om det inte finns tillräckligt med minne för att uppfylla begäran.

MissingMethodException utlöses om det inte gick att hitta en konstruktormetod ctor med angivet namn, klass och signatur. Detta identifieras vanligtvis när instruktioner för Microsoft mellanliggande språk (MSIL) konverteras till intern kod i stället för vid körning.

Följande Emit metodöverlagring kan använda newobj opcode:

Gäller för