通过反射调用方法,包括传参数和获得返回值【源码下载】


1、新建一个Node类 

    public class Node
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

2、添加两个方法,一个用于计算Node的数量,一个用于获得Node的名称

        /// <summary>
        /// 计算结点的数量
        /// </summary>
        /// <param name="lstNodes"></param>
        /// <returns></returns>
        public string CalcNodeCount(List<Node> lstNodes)
        {
            return "数量为:" + lstNodes.Count.ToString();
        }
        /// <summary>
        /// 获得节点的名称集合
        /// </summary>
        /// <param name="lstNodes"></param>
        /// <returns></returns>
        public string GetNodeNames(List<Node> lstNodes)
        {
            return "名称列表:" + string.Join(",", lstNodes.Select(c => c.Name).ToArray());
        }

3、进行调用

static void Main(string[] args)
        {
            string strNameSpace = "ReflectionDemo.Program";
            //定义一个方法名称的数组,用于循环执行
            List<string> lstMethods = new List<string> { "CalcNodeCount", "GetNodeNames" };

            //定义一个需要处理的数据源
            List<Node> lstNodes = new List<Node> { new Node { Id = 1, Name = "中国" }, new Node { Id = 2, Name = "美国" }, new Node { Id = 3, Name = "德国" } };



            Type type = Type.GetType(strNameSpace);//定义一个类型
            object instanceObj = System.Activator.CreateInstance(type); ;//定义一个变量用来存放实例化好的类型

            foreach (string methodName in lstMethods)//循环然后通过反射调用需要执行的方法,并打印出来执行结果
            {
                MethodInfo instanceMethod = type.GetMethod(methodName, new Type[] { typeof(List<Node>) });//定义方法和定义方法的参数

                List<object> lstArgs = new List<object>();
                lstArgs.Add(lstNodes);
                object[] arrayArgs = lstArgs.ToArray();//定义参数

                string strResult = (string)instanceMethod.Invoke(instanceObj, arrayArgs);//调用方法
                Console.WriteLine(strResult);
            }
            Console.ReadLine();
        }

 4、结果如下:

 

源码下载:下载


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM