1 通用方法
1.1 NewAssembly()
创建动态类程序集。
//创建动态类程序集
public static Assembly NewAssembly(List<string> propertyList){
//创建编译器实例
CSharpCodeProvider provider = new CSharpCodeProvider();
//设置编译参数
CompilerParameters paras = new CompilerParameters();
paras.GenerateExecutable = false;
paras.GenerateInMemory = true;
//创建动态代码
StringBuilder classsource = new StringBuilder();
classsource.Append("public class dynamicclass \n");
classsource.Append("{\n");
//创建属性
for (int i = 0; i < propertyList.Count; i++){
classsource.Append(Propertystring(propertyList[i]));
}
classsource.Append("}");
System.Diagnostics.Debug.WriteLine(classsource.ToString());
//编译代码
CompilerResults result = provider.CompileAssemblyFromSource(paras, classsource.ToString());
//获取编译后的程序集
Assembly assembly = result.CompiledAssembly;
return assembly;
}
1.2 ReflectionSetProperty()
设置成员属性值。
//设置成员属性值
public void ReflectionSetProperty(object objclass,string propertyname,string value){
PropertyInfo[] infos = objclass.GetType().GetProperties();
foreach (PropertyInfo info in infos){
if (info.Name == propertyname && info.CanWrite){
info.SetValue(objclass, value, null);
}
}
}
2 实现动态类实例创建和成员属性值装配
//设置动态类属性名
List<string> propertyList = new List<string>();
propertyList.Add("UserName");
propertyList.Add("Password");
//创建动态类程序集
Assembly assembly = NewAssembly(propertyList);
//创建动态类实例
dynamic model = assembly.CreateInstance("dynamicclass");
//设置动态类实例成员属性值
ReflectionSetProperty(model, "UserName", "123");
ReflectionSetProperty(model, "Password", "123456");