• C# 反射,通过类名、方法名调用方法


    在 C# 代码中,有些时候只知道方法的名字(string),需要调用该方法,那么就需要用到 C# 的反射机制。下面是一个简单的 demo。

    using System;
    using System.Reflection;
    
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                //反射获取 命名空间+类名
                string className = "ConsoleApp2.ClassSample";
                string methodName = "test1";
                //传递参数
                Object[] paras = new Object[] { "我的", "电脑" };
                var t = Type.GetType(className);
                object obj = Activator.CreateInstance(t);
    
                try
                {
                    #region 方法一
                    //直接调用
                    MethodInfo method = t.GetMethod("test2");
                    method.Invoke(obj, paras);
                    #endregion
    
                    #region 方法二
                    MethodInfo[] info = t.GetMethods();
                    for (int i = 0; i < info.Length; i++)
                    {
                        var md = info[i];
                        //方法名
                        string mothodName = md.Name;
                        //参数集合
                        ParameterInfo[] paramInfos = md.GetParameters();
                        //方法名相同且参数个数一样
                        if (mothodName == methodName && paramInfos.Length == paras.Length)
                        {
                            md.Invoke(obj, paras);
                        }
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                Console.ReadKey();
            }
        }
    
        class ClassSample
        {
            public void test1(string para1)
            {
                Console.WriteLine("方式1 {0}________test111", para1);
            }
    
            public void test1(string para1, string para2)
            {
                Console.WriteLine("方式2 {0}________test111________{1}", para1, para2);
            }
    
            public void test2(string para1, string para2)
            {
                Console.WriteLine("方式3 {0}________test222________{1}", para1, para2);
            }
        }
    }
  • 相关阅读:
    使用python打印九九乘法表
    python导入库的几种方式
    节点的介数
    连通图、强连通图、弱连通图
    python的基本格式化输出
    pycharm中的py文件重命名
    设置pycharm,在python程序的开头添加时间和作者等信息
    使用pandas库对csv文件进行筛选和保存
    python获取Excel表中某一格的数据
    使用python向txt文件写入内容
  • 原文地址:https://www.cnblogs.com/wyt007/p/9252373.html
Copyright © 2020-2023  润新知