OpCodes.Newobj Pole

Definice

Vytvoří nový objekt nebo novou instanci hodnotového typu a nasdílí odkaz na objekt (typ O) do zásobníku vyhodnocení.

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 

Hodnota pole

Poznámky

Následující tabulka uvádí hexadecimální formát sestavení instrukce a formát sestavení MSIL (Microsoft Intermediate Language) spolu se stručným souhrnem referenčních informací:

Formát Formát sestavení Description
73 <T> Newobj ctor Přidělí neinicializovaný objekt nebo typ hodnoty a zavolá metodu ctorkonstruktoru .

Přechodné chování zásobníku v sekvenčním pořadí je:

  1. Argumenty arg1 se argn do zásobníku nasdílí postupně.

  2. Argumenty argn se vysunou arg1 ze zásobníku a předají se do ctor objektu pro vytvoření objektu.

  3. Odkaz na nový objekt se nasdílí do zásobníku.

Instrukce newobj vytvoří nový objekt nebo novou instanci typu hodnoty. Ctor je token metadat ( methodref nebo methoddef , který musí být označen jako konstruktor), který označuje název, třídu a podpis konstruktoru, který se má volat.

Instrukce newobj přidělí novou instanci třídy přidružené ctor k a inicializuje všechna pole v nové instanci na 0 (správného typu) nebo null odkazy podle potřeby. Potom zavolá konstruktor ctor s danými argumenty spolu s nově vytvořenou instancí. Po zavolání konstruktoru se nyní inicializovaný odkaz na objekt (typ O) vloží do zásobníku.

Z pohledu konstruktoru je neinicializovaný objekt argument 0 a ostatní argumenty předané do newobj následují v pořadí.

Všechna jednorozměrná pole založená na nule se vytvářejí pomocí , Newarrnikoli newobj. Na druhé straně se všechna ostatní pole (více než jedna dimenze nebo jednorozměrná, ale ne nulová) vytvářejí pomocí newobj.

Hodnotové typy se obvykle nevytvořily pomocí newobj. Obvykle se přidělují buď jako argumenty nebo místní proměnné, pomocí newarr (pro jednorozměrná pole založená na nule) nebo jako pole objektů. Po přidělení se inicializují pomocí .Initobj newobj Instrukce však může být použita k vytvoření nové instance typu hodnoty v zásobníku, který pak může být předán jako argument, uložen v místním atd.

OutOfMemoryException vyvolá se, pokud není k dispozici dostatek paměti pro splnění požadavku.

MissingMethodException je vyvolána, pokud nebyla nalezena metoda ctor konstruktoru se zadaným názvem, třídou a podpisem. To se obvykle zjistí, když se pokyny jazyka MSIL (Microsoft Intermediate Language) převedou na nativní kód místo za běhu.

Následující Emit přetížení metody může použít newobj opcode:

Platí pro