1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
using System;
using System.Reflection;
using System.Reflection.Emit;
public class Test
{
public static int Main()
{
AssemblyName assemblyName = new AssemblyName ();
assemblyName.Name = "TestAssembly";
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule ("TestModule");
TypeBuilder typeBuilder = moduleBuilder.DefineType ("TestType", TypeAttributes.Public);
FieldBuilder fieldBuilder = typeBuilder.DefineField ("TestField",
typeof (int),
FieldAttributes.Private);
PropertyBuilder propertyBuilder = typeBuilder.DefineProperty ("TestProperty",
PropertyAttributes.HasDefault,
typeof (int),
new Type[] { typeof (int) });
MethodBuilder getMethodBuilder = typeBuilder.DefineMethod ("TestGetMethod",
MethodAttributes.Public,
typeof (int),
new Type[] { });
ILGenerator IL = getMethodBuilder.GetILGenerator();
IL.Emit (OpCodes.Ldarg_0);
IL.Emit (OpCodes.Ldfld, fieldBuilder);
IL.Emit (OpCodes.Ret);
MethodBuilder setMethodBuilder = typeBuilder.DefineMethod ("TestSetMethod",
MethodAttributes.Public,
null,
new Type[] { typeof(int) });
IL = setMethodBuilder.GetILGenerator();
IL.Emit (OpCodes.Ldarg_0);
IL.Emit (OpCodes.Ldarg_1);
IL.Emit (OpCodes.Stfld, fieldBuilder);
IL.Emit (OpCodes.Ret);
propertyBuilder.SetGetMethod (getMethodBuilder);
propertyBuilder.SetSetMethod (setMethodBuilder);
typeBuilder.CreateType ();
Type type = moduleBuilder.GetType ("TestType", true);
PropertyInfo propertyInfo = type.GetProperty ("TestProperty");
return 0;
}
}
|