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; } }