首页 > Web开发 > 详细

.Net——动态调用方法

时间:2015-04-25 19:49:44      阅读:258      评论:0      收藏:0      [点我收藏+]

一,使用InvokeMember

思路:在类型的type的对象上调用InvokeMember方法,传递要在其上调用方法的对象,并指定BindingFlags为InvokeMethod.根据方法签名,可能还需要传递参数。


示例(对普通方法和对静态方法的调用):

         #region 动态调用方法——使用InvokeMember对一般方法的调用

                //Type t = typeof(Calculator);
                //Calculator c = new Calculator(1, 2);
                //int result = (int)t.InvokeMember("Add", BindingFlags.InvokeMethod, null, c, null);
                //Console.WriteLine(result);

            #endregion

#region 动态调用方法——使用InvokeMember对静态含参数方法的调用

                //object[] paramas = { 6, 9 };
                //Type t = typeof(Calculator);
                //t.InvokeMember("Add", BindingFlags.InvokeMethod, null, t, paramas);//静态方法不是基于某个具体的类型实例,而是类型本身。方法参数还是以object数组传入的


            #endregion


二,使用MethodInfo.Invoke

使用思路:先通过type对象的getMethod方法,获取想要调用的方法对象,也就是Methodinfo对象,然后在该对象上调用Invoke方法。根据方法签名,可能还需要传递参数。


#region 动态调用方法——使用MethodInfo.Invoke调用方法

                Type t = typeof(Calculator);
                Calculator c = new Calculator(3, 4);
                MethodInfo mi = t.GetMethod("Add", BindingFlags.Instance | BindingFlags.Public);
                mi.Invoke(c, null);


 #endregion

其实有时候根据方法名称调用方法还是挺方便的,就是反射的带来的性能问题没有衡量过,都说性能不好,但是到底有多大影响,求解释?

.Net——动态调用方法

原文:http://blog.csdn.net/lhc1105/article/details/45272939

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!