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

    本文转自:http://www.cnblogs.com/xianzuoqiaoqi/archive/2009/04/07/1431153.html

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

  • 相关阅读:
    第六章:体系结构篇
    Linux查看显示编辑文本文件
    第五章:管理数据库实例
    yum [Errno 256] No more mirrors to try 解决方法
    第四章:Oracle12c 数据库在linux环境安装
    第三章:数据库管理的任务
    13 款免费但好用到哭的项目管理工具
    在CentOS 7上部署Ghost博客
    CentOS7上部署taiga项目管理软件
    CentOS6配置Taiga
  • 原文地址:https://www.cnblogs.com/freeliver54/p/1652838.html
Copyright © 2011-2022 走看看