OpCodes.Newobj Campo

Definição

Cria um novo objeto ou uma nova instância de um tipo de valor, empurrando uma referência de objeto (tipo O) para a pilha de avaliação.

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 

Valor de Campo

Observações

A tabela seguinte lista o formato hexadecimal e assembly da Microsoft Intermediate Language (MSIL) da instrução, juntamente com um breve resumo de referência:

Formato Formato de Montagem Description
73 <T> newobj ctor Aloca um objeto ou tipo de valor não inicializado e chama ao método ctorconstrutor .

O comportamento de transição da pilha, por ordem sequencial, é:

  1. Os argumentos arg1 atravessados argn são empurrados na pilha em sequência.

  2. Os argumentos argn através arg1 são retirados da pilha e passados para ctor criação de objetos.

  3. Uma referência ao novo objeto é empurrada para a pilha.

A newobj instrução cria um novo objeto ou uma nova instância de um tipo de valor. Ctor é um token de metadados (a methodref ou methoddef que deve ser marcado como construtor) que indica o nome, classe e assinatura do construtor a chamar.

A newobj instrução aloca uma nova instância da classe associada a ctor e inicializa todos os campos da nova instância para 0 (do tipo correto) ou referências nulas, conforme apropriado. Depois chama o construtor ctor com os argumentos dados juntamente com a instância recém-criada. Depois de o construtor ser chamado, a referência do objeto (tipo O) agora inicializada é empurrada para a pilha.

Do ponto de vista do construtor, o objeto não inicializado é o argumento 0 e os outros argumentos passados para newobj seguem-se por ordem.

Todos os arrays unidimensionais baseados em zero são criados usando Newarr, não newobj. Por outro lado, todos os outros arrays (mais de uma dimensão, ou unidimensionais mas não baseados em zero) são criados usando newobj.

Os tipos de valor normalmente não são criados usando newobj. Normalmente são alocados como argumentos ou variáveis locais, usando newarr (para arrays unidimensionais baseados em zero), ou como campos de objetos. Uma vez atribuídas, são inicializadas usando Initobj. No entanto, a newobj instrução pode ser usada para criar uma nova instância de um tipo de valor na pilha, que pode depois ser passada como argumento, armazenada num local, e assim sucessivamente.

OutOfMemoryException é lançado se não houver memória suficiente para satisfazer o pedido.

MissingMethodException é lançado se não for possível encontrar um método ctor construtor com o nome, classe e assinatura indicados. Isto é tipicamente detetado quando instruções da Microsoft Intermediate Language (MSIL) são convertidas para código nativo, em vez de em tempo de execução.

O seguinte Emit método de sobrecarga pode usar o newobj opcode:

Aplica-se a