negar_s80
شنبه 19 اسفند 1391, 14:49 عصر
سلام و خسته نباشيد من با استفاده از متد زير كلاس و Property هاي اون رو به صورت RunTime ايجاد كردم حالا مي خوام از اين كلاس به صورت BindingList<T> استفاده كنم يعني به جاي T كلاسي كه اكنون ساخته شده است . كسي مي تونه كمكم كنه ؟
public static Type BuildDynamicTypeWithProperties()
{
AppDomain myDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "TestBed";
AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(myAsmName,
AssemblyBuilderAccess.Run);
ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule("PropertyBuilderDemo");
TypeBuilder myTypeBuilder = myModBuilder.DefineType("CustomerData",
TypeAttributes.Public);
FieldBuilder customerNameBldr = myTypeBuilder.DefineField("customerName",
typeof(string),
FieldAttributes.Private);
PropertyBuilder custNamePropBldr =
myTypeBuilder.DefineProperty("CustomerName",
PropertyAttributes.HasDefault,
typeof(string),
new Type[] { typeof(string) });
Type[] ctorParams;
ConstructorInfo classCtorInfo;
CustomAttributeBuilder myCABuilder;
// Add DescriptionAttribute
ctorParams = new Type[] { typeof(string) };
classCtorInfo =
typeof(DescriptionAttribute).GetConstructor(ctorPa rams);
myCABuilder = new CustomAttributeBuilder(
classCtorInfo,
new object[] { "DescriptionAttribute" });
custNamePropBldr.SetCustomAttribute(myCABuilder);
// Add TestAttribute
ctorParams = new Type[] { typeof(string) };
classCtorInfo =
typeof(TestAttribute).GetConstructor(ctorParams);
myCABuilder = new CustomAttributeBuilder(
classCtorInfo,
new object[] { "TestAttribute" });
custNamePropBldr.SetCustomAttribute(myCABuilder);
// First, we'll define the behavior of the "get" property for CustomerName as a method.
MethodBuilder custNameGetPropMthdBldr =
myTypeBuilder.DefineMethod("GetCustomerName",
MethodAttributes.Public,
typeof(string),
new Type[] { });
ILGenerator custNameGetIL = custNameGetPropMthdBldr.GetILGenerator();
custNameGetIL.Emit(OpCodes.Ldarg_0);
custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr);
custNameGetIL.Emit(OpCodes.Ret);
// Now, we'll define the behavior of the "set" property for CustomerName.
MethodBuilder custNameSetPropMthdBldr =
myTypeBuilder.DefineMethod("SetCustomerName",
MethodAttributes.Public,
null,
new Type[] { typeof(string) });
ILGenerator custNameSetIL = custNameSetPropMthdBldr.GetILGenerator();
custNameSetIL.Emit(OpCodes.Ldarg_0);
custNameSetIL.Emit(OpCodes.Ldarg_1);
custNameSetIL.Emit(OpCodes.Stfld, customerNameBldr);
custNameSetIL.Emit(OpCodes.Ret);
// Last, we must map the two methods created above to our PropertyBuilder to
// their corresponding behaviors, "get" and "set" respectively.
custNamePropBldr.SetGetMethod(custNameGetPropMthdB ldr);
custNamePropBldr.SetSetMethod(custNameSetPropMthdB ldr);
return myTypeBuilder.CreateType();
}
public static Type BuildDynamicTypeWithProperties()
{
AppDomain myDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "TestBed";
AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(myAsmName,
AssemblyBuilderAccess.Run);
ModuleBuilder myModBuilder = myAsmBuilder.DefineDynamicModule("PropertyBuilderDemo");
TypeBuilder myTypeBuilder = myModBuilder.DefineType("CustomerData",
TypeAttributes.Public);
FieldBuilder customerNameBldr = myTypeBuilder.DefineField("customerName",
typeof(string),
FieldAttributes.Private);
PropertyBuilder custNamePropBldr =
myTypeBuilder.DefineProperty("CustomerName",
PropertyAttributes.HasDefault,
typeof(string),
new Type[] { typeof(string) });
Type[] ctorParams;
ConstructorInfo classCtorInfo;
CustomAttributeBuilder myCABuilder;
// Add DescriptionAttribute
ctorParams = new Type[] { typeof(string) };
classCtorInfo =
typeof(DescriptionAttribute).GetConstructor(ctorPa rams);
myCABuilder = new CustomAttributeBuilder(
classCtorInfo,
new object[] { "DescriptionAttribute" });
custNamePropBldr.SetCustomAttribute(myCABuilder);
// Add TestAttribute
ctorParams = new Type[] { typeof(string) };
classCtorInfo =
typeof(TestAttribute).GetConstructor(ctorParams);
myCABuilder = new CustomAttributeBuilder(
classCtorInfo,
new object[] { "TestAttribute" });
custNamePropBldr.SetCustomAttribute(myCABuilder);
// First, we'll define the behavior of the "get" property for CustomerName as a method.
MethodBuilder custNameGetPropMthdBldr =
myTypeBuilder.DefineMethod("GetCustomerName",
MethodAttributes.Public,
typeof(string),
new Type[] { });
ILGenerator custNameGetIL = custNameGetPropMthdBldr.GetILGenerator();
custNameGetIL.Emit(OpCodes.Ldarg_0);
custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr);
custNameGetIL.Emit(OpCodes.Ret);
// Now, we'll define the behavior of the "set" property for CustomerName.
MethodBuilder custNameSetPropMthdBldr =
myTypeBuilder.DefineMethod("SetCustomerName",
MethodAttributes.Public,
null,
new Type[] { typeof(string) });
ILGenerator custNameSetIL = custNameSetPropMthdBldr.GetILGenerator();
custNameSetIL.Emit(OpCodes.Ldarg_0);
custNameSetIL.Emit(OpCodes.Ldarg_1);
custNameSetIL.Emit(OpCodes.Stfld, customerNameBldr);
custNameSetIL.Emit(OpCodes.Ret);
// Last, we must map the two methods created above to our PropertyBuilder to
// their corresponding behaviors, "get" and "set" respectively.
custNamePropBldr.SetGetMethod(custNameGetPropMthdB ldr);
custNamePropBldr.SetSetMethod(custNameSetPropMthdB ldr);
return myTypeBuilder.CreateType();
}