Mega Code Archive

 
Categories / C# Tutorial / Reflection
 

Code Generator and ILGenerator

using System; using System.Reflection; using System.Reflection.Emit; class CodeGenerator {     public static void Main()     {         AppDomain currentDomain = AppDomain.CurrentDomain;         AssemblyName assemName = new AssemblyName();         assemName.Name = "MyAssembly";         AssemblyBuilder assemBuilder = currentDomain.DefineDynamicAssembly(assemName, AssemblyBuilderAccess.Run);         ModuleBuilder moduleBuilder = assemBuilder.DefineDynamicModule("MyModule");         TypeBuilder typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public);         MethodBuilder methodBuilder = typeBuilder.DefineMethod("HelloWorld", MethodAttributes.Public, null, null);         ILGenerator msilG = methodBuilder.GetILGenerator();         msilG.EmitWriteLine("Hello from C# My");         msilG.Emit(OpCodes.Ret);         Type t = typeBuilder.CreateType();         if (t != null){             object o = Activator.CreateInstance(t);             MethodInfo helloWorld = t.GetMethod("HelloWorld");             if (helloWorld != null)             {                 helloWorld.Invoke(o, null);             }         }     } }