OpCodes.Newobj Campo

Definição

Cria um novo objeto ou uma nova instância de um tipo de valor, enviando por push 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 do campo

Comentários

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

Formatar Formato de assembly Descrição
73 <T> Newobj ctor Aloca um tipo de valor ou objeto não inicializado e chama o método ctorde construtor .

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

  1. Os argumentos são argn enviados arg1 por push na pilha em sequência.

  2. Os argumentos argn por meio arg1 são exibidos da pilha e passados para para criação ctor de objeto.

  3. Uma referência ao novo objeto é enviada por push 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 (um methodref ou methoddef que deve ser marcado como construtor) que indica o nome, a classe e a assinatura do construtor a ser chamado.

A newobj instrução aloca uma nova instância da classe associada ctor a e inicializa todos os campos na nova instância como 0 (do tipo apropriado) ou referências nulas, conforme apropriado. Em seguida, ele chama o construtor ctor com os argumentos fornecidos junto com a instância recém-criada. Depois que o construtor for chamado, a referência de objeto inicializada (tipo O) será enviada por push na pilha.

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

Todas as matrizes unidimensionais baseadas em zero são criadas usando Newarr, não newobj. Por outro lado, todas as outras matrizes (mais de uma dimensão ou unidimensional, mas não baseadas em zero) são criadas usando newobj.

Os tipos de valor geralmente não são criados usando newobj. Eles geralmente são alocados como argumentos ou variáveis locais, usando newarr (para matrizes unidimensionais baseadas em zero) ou como campos de objetos. Depois de alocados, eles são inicializados 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 ser passada como um argumento, armazenada em um local e assim por diante.

OutOfMemoryException será gerado se não houver memória suficiente para atender à solicitação.

MissingMethodException será gerado se um método ctor de construtor com o nome, a classe e a assinatura indicados não puderem ser encontrados. Normalmente, isso é detectado quando as instruções da MSIL (Linguagem Intermediária da Microsoft) são convertidas em código nativo, em vez de em runtime.

A sobrecarga do método Emit a seguir pode usar o newobj opcode:

Aplica-se a