OpCodes.Newobj Pole

Definicja

Tworzy nowy obiekt lub nowe wystąpienie typu wartości, wypychając odwołanie do obiektu (typ O) na stos oceny.

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 

Wartość pola

Uwagi

W poniższej tabeli wymieniono format zestawu szesnastkowy i Microsoft Intermediate Language (MSIL) instrukcji wraz z krótkim podsumowaniem referencyjnym:

Format Format zestawu Opis
73 <T> newobj ctor Przydziela niezainicjowany obiekt lub typ wartości i wywołuje metodę ctorkonstruktora .

Zachowanie przejściowe stosu w kolejności sekwencyjnej jest następujące:

  1. Argumenty arg1argn wypychane na stos w sekwencji.

  2. Argumenty argnarg1 zwinięte ze stosu i przekazywane do elementu w celu ctor utworzenia obiektu.

  3. Odwołanie do nowego obiektu jest wypychane do stosu.

Instrukcja newobj tworzy nowy obiekt lub nowe wystąpienie typu wartości. Ctor to token metadanych (lub methodrefmethoddef , który musi być oznaczony jako konstruktor), który wskazuje nazwę, klasę i podpis konstruktora do wywołania.

Instrukcja newobj przydziela nowe wystąpienie klasy skojarzonej z ctor i inicjuje wszystkie pola w nowym wystąpieniu do 0 (odpowiedniego typu) lub odwołania o wartości null. Następnie wywołuje konstruktor ctor z podanymi argumentami wraz z nowo utworzonym wystąpieniem. Po wywołaniu konstruktora inicjowane odwołanie do obiektu (typ O) jest wypychane na stos.

Z punktu widzenia konstruktora niezainicjowany obiekt jest argumentem 0, a inne argumenty przekazywane do polecenia newobj są zgodne w kolejności.

Wszystkie tablice jednowymiarowe oparte na zerach są tworzone przy użyciu metody Newarr, a nie newobj. Z drugiej strony wszystkie inne tablice (więcej niż jeden wymiar lub jednowymiarowe, ale nie oparte na zera) są tworzone przy użyciu metody newobj.

Typy wartości nie są zwykle tworzone przy użyciu polecenia newobj. Są one zwykle przydzielane jako argumenty lub zmienne lokalne przy użyciu ( newarr w przypadku tablic jednowymiarowych opartych na zerach) lub jako pól obiektów. Po przydzieleniu są one inicjowane przy użyciu polecenia Initobj. Instrukcję newobj można jednak użyć do utworzenia nowego wystąpienia typu wartości na stosie, które następnie można przekazać jako argument, przechowywany w środowisku lokalnym itd.

OutOfMemoryException jest zgłaszany, jeśli za mało pamięci, aby spełnić żądanie.

MissingMethodException jest zgłaszany, jeśli nie można odnaleźć metody ctor konstruktora o wskazanej nazwie, klasie i podpisie. Jest to zwykle wykrywane, gdy instrukcje języka Microsoft pośredniego (MSIL) są konwertowane na kod natywny, a nie w czasie wykonywania.

Następujące Emit przeciążenie metody może używać newobj kodu opcode:

Dotyczy