Udostępnij za pośrednictwem


OpCodes.Newobj Pole

Definicja

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ę ctorkonstruktora .

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

  1. Argumenty arg1argn wypychane na stos w sekwencji.

  2. Argumenty są arg1 wyrzucone argn ze stosu i przekazywane do elementu w ctor celu 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 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:

Dotyczy