OpCodes.Newobj Pole
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 ctor konstruktoru . |
Přechodné chování zásobníku v sekvenčním pořadí je:
Argumenty
arg1
seargn
do zásobníku zasílají postupně.Argumenty
argn
jsouarg1
vynořeny ze zásobníku a předány doctor
pro vytvoření objektu.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: