Name

ILGenerator

Synopsis

This class generates MSIL (Microsoft Intermediate Language) instructions. You receive an ILGenerator object from a GetILGenerator method in a builder class. For example, you can use the ConstructorBuilder.GetILGenerator( ) to create MSIL instructions for a constructor, or MethodBuilder.GetILGenerator( ) to create MSIL instructions for a method. Use BeginScope( ) and EndScope( ) to start and stop a lexical scope.

To emit instructions, use the Emit( ) method. The Emit( ) method requires an OpCode object. The easiest way to supply this is by using one of the constant fields from OpCodes, as in myGenerator.Emit(OpCodes.Ret);. EmitWriteLine( ) creates the MSIL code required to call System.Console.WriteLine( ) with the supplied variable. You can also define and mark labels in the instruction stream (DefineLabel( ) and MarkLabel( )), emit an instruction for throwing an exception (ThrowException( )), and define local variables (DeclareLocal( )).

Emit error handling blocks with BeginExceptionBlock( ) and EndExceptionBlock( ) (which emits the equivalent of a C# try statement), BeginCatchBlock( ) (which emits the equivalent of the catch statement), and BeginFinallyBlock( ) (which emits the equivalent of the finally statement). You must end the exception block using EndExceptionBlock( ).

public class ILGenerator {
// Public Instance Methods
   public virtual void BeginCatchBlock(Type exceptionType);
   public virtual void BeginExceptFilterBlock( );
   public virtual Label BeginExceptionBlock ...

Get C# in a Nutshell, Second Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.