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 C# equivalent of a 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 method void BeginCatchBlock(
        Type exceptionType);  
   public virtual method void BeginExceptFilterBlock(); public virtual method Label ...

Get C# in a Nutshell 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.