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 são
argn
enviadosarg1
por push na pilha em sequência.Os argumentos
argn
por meioarg1
são exibidos da pilha e passados para para criaçãoctor
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 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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de