zoukankan      html  css  js  c++  java
  • C# 关于反射类[System.Reflection] 根据类名 动态调用 类方法

        /// <summary>
        /// Execute the function of the class
        /// </summary>
        /// <param name="ProjectName">the project name of the class </param>
        /// <param name="spaceName">the naming space name of the class</param>
        /// <param name="className">the name of the class</param>
        /// <param name="functionName">the function name which need to execute</param>
        /// <param name="parametersType">the type of the parameters</param>
        /// <param name="parametersValue">the value of the parameters</param>

        /// <param name="page">if you want to execute the function of the page ,set this parameter E.g. : this.Page</param>
        /// <returns>object</returns>
        public static object OperateFuction(string ProjectName, string spaceName, string className, string functionName, ArrayList parametersTypeStr, object[] parametersValue, out string Error,Page page)
        {
            //define the object which return
            object returnObj;
            //Init
            returnObj = null;
            Error = string.Empty;
            System.Reflection.Assembly asm;
            System.Type type;
            //the function in this page which not need the space name and project name
            if (!"".Equals(className))
            {
                type = Type.GetType(className);
            }else{
                type = page.GetType();
            }

            if (type == null)
            {
                string loadFile = string.Empty;
                loadFile = !"".Equals(ProjectName) ? ProjectName + ".dll" : "__code";
                if (!"__code".Equals(loadFile))
                {
                    //get the class which in the other project
                    string BasePath = System.AppDomain.CurrentDomain.BaseDirectory;
                    BasePath = BasePath.Replace(@"\\", @"\");
                    string ProjectDllPath =BasePath+ @"Bin\" + ProjectName + ".dll";
                    try
                    {
                        asm = System.Reflection.Assembly.LoadFrom(ProjectDllPath);
                    }
                    catch (System.Exception e)
                    {
                     ProjectDllPath = BasePath +  ProjectName + ".dll";
                        asm = System.Reflection.Assembly.LoadFrom(ProjectDllPath);
                    }
                }
                else
                {
                    //get the class which in the App_Code file
                    asm = System.Reflection.Assembly.Load(loadFile);
                }
                className = !"".Equals(spaceName) ? spaceName + "." + className : className;
                //get the  class which needs
                type = asm.GetType(className);
            }
            if (type != null)
            {
                //get the object of the class
                Object obj = Activator.CreateInstance(type);
                // define the parameters of the function
                System.Type[] parametersType = new Type[parametersTypeStr.Count];
                int i = 0;
                foreach (string str in parametersTypeStr)
                {
                    parametersType[i] = System.Type.GetType(str);
                    i++;
                }
                //get the function of the class
                System.Reflection.MethodInfo method = type.GetMethod(functionName, parametersType);
                if (method != null)
                {
                    try
                    {
                        // Execute the function of the class
                        returnObj = method.Invoke(obj, parametersValue);
                    }
                    catch (System.Exception e)
                    {
                        Error = e.Message;
                    }
                }
            }
            return returnObj;
        }

  • 相关阅读:
    性能调优之网络速度检测
    通过脚本自动下载Esri会议材料
    移动目标在三维GIS中的实现方法
    java生成CSV文件
    java 提取(解压)zip文件中特定后缀的文件并保存到指定目录
    java 提取(解压)rar文件中特定后缀的文件并保存到指定目录
    spring boot 使用 POI 读取Excel文件
    spring boot jpa 使用<S extends T> List<S> findAll(Example<S> example)查询数据
    一个MySQL中两表联合update的例子(并带有group by分组)
    Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)
  • 原文地址:https://www.cnblogs.com/xianzuoqiaoqi/p/1431153.html
Copyright © 2011-2022 走看看