2 using System.Reflection;
\r
3 using System.Reflection.Emit;
\r
11 public static int Main()
\r
13 Bla<int> d = new Bla<int>();
17 AppDomain domain = AppDomain.CreateDomain ("test");
19 domain.ExecuteAssembly ("Instance.exe");
20 } catch (Exception e) {
21 Console.WriteLine ("assembly has thrown "+e);
27 public static void Instance()
\r
29 AssemblyName name = new AssemblyName("Instance");
\r
30 AssemblyBuilder asmbuild = System.Threading.Thread.GetDomain().DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);
\r
31 ModuleBuilder mod = asmbuild.DefineDynamicModule("Instance.exe");
\r
33 TypeBuilder G = mod.DefineType("G", TypeAttributes.Public);
\r
34 Type T = G.DefineGenericParameters("T")[0];
\r
35 Type GObj = G.MakeGenericType(new Type[] { typeof(object) });
\r
37 ConstructorBuilder Ctor = G.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
\r
39 ILGenerator il = Ctor.GetILGenerator();
\r
40 il.Emit(OpCodes.Ldarg_0);
\r
41 il.Emit(OpCodes.Call, typeof(object).GetConstructor(new Type[0]));
\r
42 il.Emit(OpCodes.Ret);
\r
45 MethodBuilder Bar = G.DefineMethod("Bar", MethodAttributes.Public);
47 ILGenerator il = Bar.GetILGenerator();
51 MethodBuilder Foo = G.DefineMethod("Foo", MethodAttributes.Public | MethodAttributes.Static );
53 ILGenerator il = Foo.GetILGenerator();
54 il.Emit(OpCodes.Newobj, Ctor);
55 il.Emit(OpCodes.Call, Bar);
59 TypeBuilder M = mod.DefineType("M", TypeAttributes.Public);
62 MethodBuilder main = M.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static );
\r
64 ILGenerator il = main.GetILGenerator();
\r
65 il.Emit(OpCodes.Call, TypeBuilder.GetMethod (GObj, Foo));
66 il.Emit(OpCodes.Ret);
\r
69 asmbuild.SetEntryPoint (main);
73 asmbuild.Save("Instance.exe");
76 Console.WriteLine("ok");
\r