OpCodes.Newobj Pole
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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:
Argumenty
arg1sąargnwypychane na stos w sekwencji.Argumenty
argnsąarg1zwinięte ze stosu i przekazywane do elementu w celuctorutworzenia obiektu.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: