zoukankan      html  css  js  c++  java
  • 通过反射调用方法,包括传参数和获得返回值【源码下载】

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

    源码下载:下载

  • 相关阅读:
    Largest Rectangle in Histogram
    Vertica环境安装R-Lang包提示缺少libgfortran.so.1
    Sybase数据库收集表及其索引的统计信息
    Linux 内存管理
    ORA-01439: 要更改数据类型, 则要修改的列必须为空
    MySQL ibdata1文件迁移
    exp/imp 参数说明,中英对照
    expdp/impdp 参数说明,中英对照
    Oracle ASM diskgroup在主机重启后启动失败
    Linux NFS 服务部署
  • 原文地址:https://www.cnblogs.com/wjx-blog/p/9004210.html
Copyright © 2011-2022 走看看