OpCodes.Newobj Campo
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 ctor de construtor . |
O comportamento de transição da pilha, em ordem sequencial, é:
Os argumentos
arg1
por meioargn
de são enviados por push na pilha em sequência.Os argumentos
argn
por meioarg1
de são exibidos da pilha e passados para para actor
criação de objeto.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: