OpCodes.Newobj Campo

Definizione

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 ctordel costruttore .

Il comportamento di transizione dello stack, in ordine sequenziale, è:

  1. Gli argomenti tramite argn vengono inseriti arg1 nello stack in sequenza.

  2. Gli argomenti tramite arg1 vengono estratte argn dallo stack e passate a ctor per la creazione di oggetti.

  3. 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 methodrefmethoddef 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:

Si applica a