C# 如何将通过反射获得的 MethodInfo 类添加到 Dictionary 中

2024-12-27 11:46:21
推荐回答(3个)
回答1:

我不是很了解你的用意,不过你 试试看这个能不能给你思路!

但是我觉得你那一样反射去做的话就会造成所有的待用都只能调用到最后一个函数,因为你的委托只有一个,反射也是委托,你改变其中的一个,其他都会跟着变,结果就是public viod myProc_1(byte[] data) 被调用,其他的都调用不了,所以你的代码需要改造 如下

声明dic:

Dictionary Func = new Dictionary()

反射,假如你的方法在Demo类中,反射添加如下

   try
            {
                Demo demo = new Demo();
                MethodInfo[] methods = demo.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
                //获取想要的方法集合,"myProc"是方法查找关键字
                int i = 0;
                foreach (MethodInfo t in methods.Where(F => F.Name.Contains("myProc")))
                {
                    Func.Add(i,t);
                    i++;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

调用:        非静态方法

                demo = new Demo();
                Func[0].Invoke(demo, new object[1] { new byte[1] });
                Func[1].Invoke(demo, new object[1] { new byte[2] });

                如果是静态的方法

                Func[0].Invoke(null, new object[1] { new byte[1] });
                Func[1].Invoke(null, new object[1] { new byte[2] });

就这样...

 

 

 

回答2:

Func.add(i,t as myProc);

回答3:

Assembly ass = Assembly.LoadFrom("System.Windows.Forms.dll"); //加载一个程序集
var form = ass.GetType("System.Windows.Forms.Form"); //获取一个类型,需要全名称
Dictionary d = new Dictionary();//获取所有方法
//form.GetMethods(BindingFlags.Public| BindingFlags.Instance) 可以指定 方法的一些特性
foreach(var mi in form.GetMethods())
{
d.Add(mi.Name, mi); //添加到字典中
}