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
) do stosu 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 instrukcji i microsoft intermediate language (MSIL) 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ę ctor konstruktora . |
Zachowanie przejściowe stosu w kolejności sekwencyjnej jest następujące:
Argumenty
arg1
sąargn
wypychane na stos w sekwencji.Argumenty są
arg1
wyrzuconeargn
ze stosu i przekazywane do elementu wctor
celu utworzenia 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 methodref
methoddef
, 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 newobj następują w kolejności.
Wszystkie tablice jednowymiarowe oparte na zerach są tworzone przy użyciu funkcji Newarr, a nie newobj
. Z drugiej strony wszystkie inne tablice (więcej niż jeden wymiar lub jednowymiarowe, ale nie oparte na zerach) 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
dla tablic jednowymiarowych opartych na zerach) lub jako pola obiektów. Po przydzieleniu są one inicjowane przy użyciu polecenia Initobj. Jednak newobj
instrukcja może służyć do utworzenia nowego wystąpienia typu wartości na stosie, które można następnie przekazać jako argument, przechowywany w środowisku lokalnym itd.
OutOfMemoryException jest zgłaszany, jeśli za mało pamięci, aby spełnić żądanie.
MissingMethodException metoda jest zgłaszana, jeśli nie można odnaleźć metody ctor
konstruktora o wskazanej nazwie, klasie i podpisie. Jest to zwykle wykrywane, gdy instrukcje języka Microsoft Intermediate Language (MSIL) są konwertowane na kod natywny, a nie w czasie wykonywania.
Emit Następujące przeciążenie metody może używać newobj
kodu opcode: