博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net——动态调用方法
阅读量:6807 次
发布时间:2019-06-26

本文共 1173 字,大约阅读时间需要 3 分钟。

一,使用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

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

转载地址:http://yoxwl.baihongyu.com/

你可能感兴趣的文章
hibernate-annotation
查看>>
用枚举表示常量
查看>>
《可信计算的研究与发展》;C-Rank:一种Deep Web数据记录可信度评估方法
查看>>
windows系统挂载存储阵列的iscsi映射虚拟磁盘
查看>>
我的友情链接
查看>>
ios开发中涉及到的权限问题
查看>>
jdbc
查看>>
java虚拟机
查看>>
在华为服务器 RH 2288H V2上装 windows 2008
查看>>
一个flag
查看>>
我的友情链接
查看>>
shell脚本删除分区
查看>>
Java基础学习总结(21)——数组
查看>>
MyBatis学习总结(五)——实现关联表查询
查看>>
ospf实验(2)
查看>>
LinuxShell 脚本条件语句的运用
查看>>
MyBatis学习总结(一)——MyBatis快速入门
查看>>
Enterprise Manager 无法连接到数据库实例。下面列出了组件的状态。
查看>>
OpenStack Orchestration service (编排服务Heat)
查看>>
Python-字符串
查看>>