zoukankan      html  css  js  c++  java
  • 反射方法


    ///利用反射实现动态实例化类,并且调用类的方法和参数

    代码
     /// <summary>
            
    /// 通过函数取出指标数据
    ///利用反射实现动态实例化类,并且调用类的方法和参数
            
    /// </summary>
            
    /// <returns></returns>
            public DataTable FunctionCalc(string dateflag, string cycle, string deptids)
            {
                model.IsStop 
    = "0";

                DataTable dtitem 
    = dalitem.GetList(model).Tables[0];

                DataRow[] dritemid 
    = dtitem.Select("itemfrom ='" + HCMS.Common.Constant.ITEMFROM.FUNCTION + "' and formula is not null");

                
    string strformula = "";

                
    string stritemid = "";

                DataTable dt 
    = new DataTable();

                
    foreach (DataRow item in dritemid)
                {
                    stritemid 
    = item["itemid"].ToString();

                    strformula 
    = item["formula"].ToString(); //得到数据库存的类名

                    
    object obj;

                    Type t;

                    t 
    = Type.GetType("MSBLL." + strformula); //得到这个类

                    MethodInfo methodInfo 
    = t.GetMethod("CalcWorkLoad"); //得到方法

                    ParameterInfo[] paramsInfo 
    = methodInfo.GetParameters();//得到指定方法的参数列表

                    
    int length = paramsInfo.Length; //参数的个数

                    
    object[] count = new object[length]; //定义OBJECT类型的数组

                    
    //给每个参数赋值
                    for (int i = 0; i < length; i++)
                    {

                        count[i] 
    = "ss";

                    }

                    
    object instance = Activator.CreateInstance(t); //把t实例化了

                    obj 
    = methodInfo.Invoke(instance, count); //参数必须是OBJECT和OBJECT[]类型

                    dt 
    = (DataTable)obj;


                    
    //第二种方法:先反射后接口
                    
    //stritemid = item["itemid"].ToString();

                    
    //strformula = item["formula"].ToString();

                    
    //object obj;

                    
    //Type t;

                    
    //t = Type.GetType("MSBLL." + strformula);

                    
    //obj = Activator.CreateInstance(t);

                    
    //MSBLL.CalFunction.IFunction iclass = (MSBLL.CalFunction.IFunction)obj;

                    
    ////dt = iclass.CalcWorkLoad(stritemid,dateflag, cycle, deptids);


                }

                
    return dt;
            
            }

             

  • 相关阅读:
    迁移学习——使用Tensorflow和VGG16预训模型进行预测
    AWK调用SHELL,并将变量传递给SHELL
    天津Uber优步司机奖励政策(1月18日~1月24日)
    南京Uber优步司机奖励政策(1月18日~1月24日)
    宁波Uber优步司机奖励政策(1月18日~1月24日)
    杭州(含嘉兴,绍兴,金华,湖州,义乌)Uber优步司机奖励政策(1月18日~1月24日)
    佛山Uber优步司机奖励政策(1月18日~1月24日)
    长沙Uber优步司机奖励政策(1月18日~1月24日)
    广州Uber优步司机奖励政策(1月18日~1月24日)
    西安Uber优步司机奖励政策(1月18日~1月24日)
  • 原文地址:https://www.cnblogs.com/qipilang/p/1620971.html
Copyright © 2011-2022 走看看