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í jazyka MSIL (Intermediate Language) a Microsoft s stručným přehledem referenčních informací:
| Formát | Formát sestavení | Description |
|---|---|---|
73 <T> |
Newobj ctor |
Přidělí neinicializovaný objekt nebo typ hodnoty a volá metodu konstruktoru ctor. |
Přechodné chování zásobníku v sekvenčním pořadí je:
Argumenty jsou
arg1vloženyargndo zásobníku v posloupnosti.Argumenty se
argnpřekryjíarg1ze zásobníku a předají sectork vytvoření objektu.Odkaz na nový objekt se vloží do zásobníku.
Instrukce newobj vytvoří nový objekt nebo novou instanci typu hodnoty.
Ctor je token metadat ( methodref nebo methoddef 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 a inicializuje všechna pole v nové instanci na hodnotu 0 (odpovídajícího typu) nebo odkazy null podle potřeby. Potom volá 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 hlediska 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 jsou vytvořena pomocí Newarr, nikoli newobj. Na druhé straně se všechna ostatní pole (více než jedna dimenze nebo jednorozměrná, ale ne nulová) vytvářejí pomocí newobj.
Typy hodnot se obvykle nevytvořily pomocí newobj. Obvykle se přidělují jako argumenty nebo místní proměnné pomocí newarr (pro jednorozměrná pole založená na nule, jednorozměrná pole) nebo jako pole objektů. Po přidělení se inicializují pomocí Initobj.
newobj Instrukce se ale dá použít k vytvoření nové instance typu hodnoty v zásobníku, která se pak dá předat jako argument, uložit v místním prostředí atd.
OutOfMemoryException je vyvolán, pokud není dostatek paměti pro splnění požadavku.
MissingMethodException je vyvolána, pokud konstruktor metoda ctor s označeným názvem, třída a podpis nelze najít. To se obvykle zjistí, když se instrukce jazyka MSIL (Microsoft Intermediate Language) převedou na nativní kód, nikoli za běhu.
Emit Následující přetížení metody může použít newobj opcode: