using System;
using System.Reflection;
using System.Reflection.Emit;
//djd
// Generate a generic class, add a method and store in a dll
class DemoAssemblyBuilder
{
public static void Main()
{
AssemblyName assName = new AssemblyName("MeaningOfLife");
AssemblyBuilder assBuilder =
AppDomain.CurrentDomain.DefineDynamicAssembly(assName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder mb = assBuilder.DefineDynamicModule(assName.Name, assName.Name + ".dll");
TypeBuilder tb = mb.DefineType("GaudeamusIgitur", TypeAttributes.Public);
GenericTypeParameterBuilder[] genericParams = tb.DefineGenericParameters("T1", "T2");
tb.DefineField("key", genericParams[0], FieldAttributes.Public);
tb.DefineField("value", genericParams[0], FieldAttributes.Public);
MethodBuilder method = tb.DefineMethod("Salve", MethodAttributes.Public, typeof(void),Type.EmptyTypes);
ILGenerator gen = method.GetILGenerator();
gen.EmitWriteLine((string)"42");
gen.Emit(OpCodes.Ret);
Type t = tb.CreateType();
assBuilder.Save(assName.Name + ".dll");
}
}
using
System;
public
classClass1
{
publicstaticvoid Main()
{
GaudeamusIgitur<int, int> g = newGaudeamusIgitur<int, int>();
g.key = 1;
g.value = 42;
g.Salve();
}
}