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 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 ctor konstruktoru . |
Přechodné chování zásobníku v sekvenčním pořadí je:
Argumenty
arg1
seargn
do zásobníku nasdílí postupně.Argumenty
argn
se vysunouarg1
ze zásobníku a předají se doctor
objektu pro vytvoření objektu.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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro