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.