C# 使用Assembly程序集和dynamic动态类型实现动态类实例创建和成员属性值装配

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");

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值