Reflection C#

using System;
using System.Reflection;
using System.Reflection.Emit;
class CodeGenerator {       
    Type t;
    public static void Main() {
       CodeGenerator codeGen = new CodeGenerator();
       Type t = codeGen.T;
       if (t != null) {
          object o = Activator.CreateInstance(t);
          MethodInfo helloWorld = t.GetMethod("HelloWorld");
          if (helloWorld != null) {
             // Run the HelloWorld Method
             helloWorld.Invoke(o, null);
          } else {
             Console.WriteLine("Could not retrieve MethodInfo");
          }
       } else {
             Console.WriteLine("Could not access the Type");
       }
    } 
    public CodeGenerator() {
       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("www.rntsoft.com");
       msilG.Emit(OpCodes.Ret);
       t = typeBuilder.CreateType();
   }
   public Type T {
       get { 
         return this.t;
       }
   }
}