Compartilhar via


Emissão instruções MSIL com reflexão Emit

The ILGenerator classe fornece métodos que podem ser usados para emitir Microsoft intermediate linguagem (MSIL). The ConstructorBuilder.GetILGenerator método retorna um ILGenerator um construtor.The MethodBuilder.GetILGenerator método retorna um ILGenerator para um método.

Observação:

Quando são executados métodos dinâmicos, o compilador (JIT) just-in-time é chamado para converter o MSIL para código nativo.Exceções podem ser lançadas neste momento.Por exemplo, InvalidProgramException pode ser lançada se o corpo do método exceder uma limitação interna, sistema autônomo o dimensionar máximo permitido. TargetInvocationException pode ser lançada, com um interno VerificationException exceção, se SkipVerification será recusada para forçar a verificação de MSIL emitido. Recusando SkipVerification durante o desenvolvimento é recomendado, como verificar código melhora a qualidade e estabilidade do programa.

Os seguintes serviços são fornecidos pelo ILGenerator classe:

  • Emitir vários tipos de instruções usando diferentes formas de ILGenerator.Emit métodos.Essas instruções têm diferentes tipos de operandos dependendo do tipo de instrução.

  • Declare um rótulo.A posição do rótulo no fluxo de instrução é especificada usando um método diferente.

  • Marca uma posição no fluxo de MSIL com um rótulo.

  • Lançar uma exceção.

  • Escreva uma linha ao console.

  • Defina um bloco de exceção.

    • ILGenerator.BeginExceptionBlock começa um bloco de exceção.

    • ILGenerator.BeginExceptFilterBlock começa um manipulador de exceção filtrada.

    • ILGenerator.BeginCatchBlock começa um manipulador de exceção digitado.

    • ILGenerator.BeginFinallyBlock começa um manipulador finally.

    • ILGenerator.BeginFaultBlock começa um manipulador de falhas.

    • ILGenerator.EndExceptionBlock Finaliza um bloco de exceção.

Para manipuladores catch, a sequência de chamadas deverá ser semelhante o modelo a seguir:

Emit some MSIL.
BeginExceptionBlock
Emit the MSIL for the try block.
BeginCatchBlock
Emit the MSIL for the handler.
BeginCatchBlock
Emit the MSIL for the handler.
BeginFaultBlock
Emit the MSIL for the fault block.
BeginFinallyBlock
Emit the MSIL for the finally block.
EndExceptionBlock

Para manipuladores filtrados, a sequência de chamadas deverá ser semelhante o modelo a seguir:

Emit some MSIL.
BeginExceptionBlock
Emit the MSIL for the try block.
BeginExceptFilterBlock
Emit the MSIL for the filtered exception handler.
BeginCatchBlock
Emit the MSIL for the catch block. The catch handler should be supplied with a null type.
BeginFaultBlock
Emit the MSIL for the fault block.
BeginFinallyBlock
Emit the MSIL for the finally block.
EndExceptionBlock

Consulte também

Outros recursos

Usando o reflexão Emit