zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
  • 相关阅读:
    01背包回溯法
    网络嗅探器
    侦听局域网内密码
    Winsock协议目录
    LSP(分层服务提供者)
    n后问题回溯法
    批处理作业调度回溯法
    图m着色问题
    SPI概述
    符号三角形问题回溯法
  • 原文地址:https://www.cnblogs.com/wyt007/p/9252373.html
Copyright © 2011-2022 走看看