2 using System
.Reflection
;
3 using System
.Reflection
.Emit
;
11 public static int Main()
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()
29 AssemblyName name
= new AssemblyName("Instance");
30 AssemblyBuilder asmbuild
= System
.Threading
.Thread
.GetDomain().DefineDynamicAssembly(name
, AssemblyBuilderAccess
.RunAndSave
);
31 ModuleBuilder mod
= asmbuild
.DefineDynamicModule("Instance.exe");
33 TypeBuilder G
= mod
.DefineType("G", TypeAttributes
.Public
);
34 Type T
= G
.DefineGenericParameters("T")[0];
35 Type GObj
= G
.MakeGenericType(new Type
[] { typeof(object) }
);
37 ConstructorBuilder Ctor
= G
.DefineConstructor(MethodAttributes
.Public
, CallingConventions
.Standard
, null);
39 ILGenerator il
= Ctor
.GetILGenerator();
40 il
.Emit(OpCodes
.Ldarg_0
);
41 il
.Emit(OpCodes
.Call
, typeof(object).GetConstructor(new Type
[0]));
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
);
64 ILGenerator il
= main
.GetILGenerator();
65 il
.Emit(OpCodes
.Call
, TypeBuilder
.GetMethod (GObj
, Foo
));
69 asmbuild
.SetEntryPoint (main
);
73 asmbuild
.Save("Instance.exe");
76 Console
.WriteLine("ok");