Compartilhar via


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 arg1 por meio argn de são enviados por push na pilha em sequência.

  2. Os argumentos argn por meio arg1 de são exibidos da pilha e passados para para a ctor criação 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 um 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 para 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 tiver sido 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 na 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 do MSIL (Microsoft Intermediate Language) são convertidas em código nativo, em vez de em runtime.

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

Aplica-se a