OpCodes.Newobj Campo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Crea un nuovo oggetto o una nuova istanza di un tipo di valore, inserendo un riferimento a un oggetto (di tipo O
) nello stack di valutazione.
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
Valore del campo
Commenti
La tabella seguente elenca il formato di assembly Esadecimale e MSIL (Microsoft Intermediate Language), insieme a un breve riepilogo dei riferimenti:
Formato | Formato assembly | Descrizione |
---|---|---|
73 <T > |
newobj ctor |
Alloca un oggetto o un tipo valore non inizializzato e chiama il metodo ctor del costruttore . |
Il comportamento di transizione dello stack, in ordine sequenziale, è:
Gli argomenti tramite
argn
vengono inseritiarg1
nello stack in sequenza.Gli argomenti tramite
arg1
vengono estratteargn
dallo stack e passate actor
per la creazione di oggetti.Viene eseguito il push di un riferimento al nuovo oggetto nello stack.
L'istruzione newobj
crea un nuovo oggetto o una nuova istanza di un tipo valore.
Ctor
è un token di metadati (o methodref
methoddef
che deve essere contrassegnato come costruttore) che indica il nome, la classe e la firma del costruttore da chiamare.
L'istruzione newobj
alloca una nuova istanza della classe associata a ctor
e inizializza tutti i campi nella nuova istanza a 0 (del tipo appropriato) o riferimenti Null in base alle esigenze. Chiama quindi il costruttore ctor
con gli argomenti specificati insieme all'istanza appena creata. Dopo aver chiamato il costruttore, viene eseguito il push del riferimento all'oggetto ora inizializzato (tipo O
) nello stack.
Dal punto di vista del costruttore, l'oggetto non inizializzato è l'argomento 0 e gli altri argomenti passati a newobj seguono in ordine.
Tutte le matrici unidimensionali in base zero vengono create usando Newarr, non newobj
. D'altra parte, tutte le altre matrici (più di una dimensione o unidimensionale ma non in base zero) vengono create usando newobj
.
I tipi valore non vengono in genere creati usando newobj
. Vengono in genere allocati come argomenti o variabili locali, usando newarr
(per matrici unidimensionali in base zero) o come campi di oggetti. Dopo l'allocazione, vengono inizializzati usando Initobj. È tuttavia possibile usare l'istruzione newobj
per creare una nuova istanza di un tipo valore nello stack, che può quindi essere passata come argomento, archiviata in un locale e così via.
OutOfMemoryException viene generata se la memoria non è sufficiente per soddisfare la richiesta.
MissingMethodException viene generata se non è stato possibile trovare un metodo ctor
del costruttore con il nome, la classe e la firma indicati. Questo viene in genere rilevato quando le istruzioni MSIL (Microsoft Intermediate Language) vengono convertite in codice nativo, anziché in fase di esecuzione.
L'overload del metodo seguente Emit può usare il newobj
codice operativo: