OpCodes.Newobj Pole

Definice

Vytvoří nový objekt nebo novou instanci typu hodnoty 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í šestnáctkový formát sestavení instrukce a formát sestavení MSIL (Microsoft Intermediate Language) spolu se stručným přehledem referencí:

Formát Formát sestavení Description
73 <T> Newobj ctor Přidělí neinicializovaný objekt nebo typ hodnoty a volá 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 zasílají postupně.

  2. Argumenty argn jsou arg1 vynořeny ze zásobníku a předány do ctor pro vytvoření objektu.

  3. Odkaz na nový objekt je vložen 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é newobj následují v pořadí.

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

Typy hodnot se obvykle nevytvávají 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 se ale dá použít k vytvoření nové instance hodnotového typu v zásobníku, která pak může být předána jako argument, uložena v místním prostředí atd.

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

MissingMethodException vyvolá se, pokud nelze najít metodu ctor konstruktoru s uvedeným názvem, třídou a podpisem. To se obvykle zjistí, když jsou instrukce jazyka MSIL (Microsoft Intermediate Language) převedeny na nativní kód, nikoli za běhu.

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

Platí pro