OpCodes.Newobj Campo
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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, é:
Os argumentos
arg1atravessadosargnsão empurrados na pilha em sequência.Os argumentos
argnatravésarg1são retirados da pilha e passados paractorcriação de objetos.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: