zoukankan      html  css  js  c++  java
  • C# 反射,动态类,动态方法

    1.动态类名,固定方法名,例如.调用不同类下边的GetById()方法:

    //项目需要引用Miscorsoft.CSharp类库,否则会报错:找不到编译动态表达式所需的一个或者多个类型.
    //引用这两个命名空间
    using System.Dynamic;
    using System.Reflection;

    Assembly asmb = typeof(CityScsbxxbServiceBase).Assembly; //表示调用dll(前提是项目引用该dll) CityScsbxxbServiceBase表示该dll中随便一个类名 Type type = asmb.GetType(strClassName, false);         //strClassName 表示类的名称,最好写成完整形式例如:Bobole.Service.City.CityScsbxxbServiceBase dynamic obj1 = System.Activator.CreateInstance(type); object entity = obj1.GetById(primaryKey);            //GetById 表示类strClassName 里边的一个方法 ,primaryKey表示该方法的参数
    ///下边是对象转换成xml
    var ele = new XElement("table");
    if
    (entity != null)
    {
      var props = entity.GetType().GetProperties();
      foreach (var item in props) {
      ele.Add(
    new XElement(item.Name, item.GetValue(entity, null)));
    } }

    2.动态类名,动态方法(和上边一种引用一样)

    根据接收不同的实体调用不同的方法:

    //项目需要引用Miscorsoft.CSharp类库,否则会报错:找不到编译动态表达式所需的一个或者多个类型.
    //引用这两个命名空间
    using System.Dynamic;
    using System.Reflection;

    Assembly asmb_Service = typeof(CityScsbxxbServiceBase).Assembly;   //引用对应方法的dll
    Assembly asmb_entity = typeof(CityScsbxxbBase).Assembly;        //引用实体的dll

    Type type = asmb_entity.GetType(entityClassName, false);        //entityClassName为实体类的名称(命名空间+类名)
    var obj1 = System.Activator.CreateInstance(type);

    type = asmb_Service.GetType(ServiceClassName, false);          //ServiceClassName为对应方法的类的名称(命名空间+类名)

    dynamic service = System.Activator.CreateInstance(type);
    var method = type.GetMethod("Update", new Type[] { obj1.GetType() });   //Update为动态方法名称
         if (method == null)
              throw new Exception("未找到更新方法");
    var success = method.Invoke(service, new object[] { obj1 });


  • 相关阅读:
    深搜的剪枝技巧(二)——生日蛋糕(优化搜索顺序、可行性剪枝,最优性剪枝)
    深搜的剪枝技巧(一)——树的划分(可行性剪枝、上下界剪枝)
    MATLAB 线性规划实例应用
    七大排序算法(下)
    七大排序算法(中)
    七大排序算法(上)
    二叉树的遍历
    链表的排序
    数据结构(三):链表的Java实现
    数据结构(二):队列的Java实现
  • 原文地址:https://www.cnblogs.com/-hao/p/10025326.html
Copyright © 2011-2022 走看看