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;
        }

  • 相关阅读:
    第一、二章读书笔记
    # 学号 20191221 《Python程序设计》实验一报告
    20191221实验四实验报告
    学号:20191221,《python实验设计》实验报告三
    20191221实验二报告
    快速浏览教材遇到
    何应霆 20191221
    2019-2020-1 20191319 《信息安全专业导论》第3周学习总结
    2019-2020-1 20191319《信息安全专业导论》第二周学习总结
    师生关系
  • 原文地址:https://www.cnblogs.com/xianzuoqiaoqi/p/1431153.html
Copyright © 2011-2022 走看看