ILGenerator

ILGenerator

System.Reflection.Emit (mscorlib.dll) class

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  ( );    public virtual void  BeginFaultBlock  ( );    public virtual void  BeginFinallyBlock  ( );    public virtual void  BeginScope  ( );    public LocalBuilder  DeclareLocal  (Type   localType   );    public virtual Label  DefineLabel  ( );    public virtual void  Emit  (OpCode   opcode   );    public virtual void  Emit  (OpCode   opcode   , byte   arg   );    public virtual void  Emit  (OpCode   opcode   , System.Reflection.ConstructorInfo   con   );    public virtual void  Emit  (OpCode   opcode   , double   arg   );    public virtual void  Emit  (OpCode   opcode   , System.Reflection.FieldInfo   field   );    public virtual void  Emit  (OpCode   opcode   , short   arg   );    public virtual void  Emit  (OpCode   opcode   , int   arg   );    public virtual void  Emit  (OpCode   opcode   , long   arg   );    public virtual void  Emit  (OpCode   opcode   , Label   label   );    public virtual void  Emit  (OpCode   opcode   , Label[ ]   labels   );    public virtual void  Emit  (OpCode   opcode   , LocalBuilder   local   );    public virtual void  Emit  (OpCode   opcode   , System.Reflection.MethodInfo   meth   );    public void  Emit  (OpCode   opcode   , sbyte   arg   );    public virtual void  Emit  (OpCode   opcode   , SignatureHelper   signature   );    public virtual void  Emit  (OpCode   opcode   , float   arg   );    public virtual void  Emit  (OpCode   opcode   , string   str   );    public virtual void  Emit  (OpCode   opcode   , Type   cls   );    public void  EmitCall  (OpCode   opcode   , System.Reflection.MethodInfo   methodInfo   ,          Type[ ]   optionalParameterTypes   );    public void  EmitCalli  (OpCode   opcode   , System.Reflection.CallingConventions   callingConvention   ,         Type   returnType   , Type[ ]   parameterTypes   , Type[ ]   optionalParameterTypes   );    public void  EmitCalli  (OpCode   opcode   , System.Runtime.InteropServices.CallingConvention   unmanagedCallConv   ,        Type   returnType   , Type[ ]   parameterTypes   );    public virtual void  EmitWriteLine  (System.Reflection.FieldInfo   fld   );    public virtual void  EmitWriteLine  (LocalBuilder   localBuilder   );    public virtual void  EmitWriteLine  (string   value   );    public virtual void  EndExceptionBlock  ( );    public virtual void  EndScope  ( );    public virtual void  MarkLabel  (Label   loc   );    public virtual void  MarkSequencePoint  (System.Diagnostics.SymbolStore.ISymbolDocumentWriter   document   ,         int   startLine   , int   startColumn   , int   endLine   , int   endColumn   );    public virtual void  ThrowException  (Type   excType   );    public void  UsingNamespace  (string   usingNamespace   ); } 

Returned By

ConstructorBuilder.GetILGenerator( ) , MethodBuilder.GetILGenerator( )



C# in a Nutshell
C # in a Nutshell, Second Edition
ISBN: 0596005261
EAN: 2147483647
Year: 2005
Pages: 963

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net