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


    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、结果如下:

    源码下载:下载

  • 相关阅读:
    Codeforces Round #632 (Div. 2) D-Challenges in school №41(模拟好题)
    余数求和
    B. 齐心抗疫
    MyBatis源码分析
    关于Idea中右边的maven projects窗口找不到了如何调出来
    IDEA java类文件左下角出现红色的J标识,解决方法
    Postman Tests脚本的使用
    JSONPath解析json
    Postman + Newman 生成测试报告
    TestNG 多线程测试
  • 原文地址:https://www.cnblogs.com/wjx-blog/p/9004210.html
Copyright © 2020-2023  润新知