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 ByConstructorBuilder.GetILGenerator( ) , MethodBuilder.GetILGenerator( ) |