.NET 反射技术传递参数实例

用反射用了很长一段时间了只知道它的大概用处、具有什么样的功能,最近仔细看了下反射方面的知识,顺便也实践了一把,如动态调用DLL、创建实例对象等。在调用反射对象中有参数的方法时遇到了点问题,不知道参数该如何传递进去。在网上搜了下传递参数的方法有很多,有通过构造函数传递,有用MethodInfo对象的Invoke方法传递,比较了下貌似用Invoke方法传递比较方便,下面就说说吧。

我的测试方法中有两个类库,一个是函数类库,另一个是执行输出的控制台程序。主要是用控制台程序采用反射技术调用函数类库中的方法,具体的说明请看代码中的注释。

以下是主要代码片段

static void Main(string[] args)
        {
            
//此处用反射调用DLL文件,路径是我硬盘的路径
            Assembly a = Assembly.LoadFrom("D:\\工作文件\\Code\\Code\\Function\\bin\\Debug\\Code.Function.dll");
            Type[] tList 
= a.GetTypes();//获取该DLL程序集中定义的类或类型
            if (tList != null)//如果不为空
            {
                
foreach (Type tItem in tList)//遍历每一个类或类型
                {
                    
//获取类中的方法
                    MethodInfo[] methods = tItem.GetMethods(BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public);
                    
//在类中查找方法名为“Show”的方法。
                    MethodInfo mShow = findMethod(methods, "Show");
                    
if (mShow != null)
                    {
                        
//创建该类的实例
                        object instance = Activator.CreateInstance(tItem);
                        
object[] parameters = new object[1];//定义参数类型
                        parameters[0= (object)"aaa";//设置Show方法的参数值
                        Console.WriteLine(mShow.Invoke(instance, parameters));//打印Show方法的输出结果
                    }
                }
            }
            Console.ReadLine();
        }

此处附上源代码(源代码是在VS 2008环境中写的)     点击下载

posted @ 2011-01-24 18:28  小胆粗心  Views(1108)  Comments(0)    收藏  举报