.Net——动态调用方法
程序员文章站
2022-07-08 13:59:47
一,使用InvokeMember
思路:在类型的type的对象上调用InvokeMember方法,传递要在其上调用方法的对象,并指定BindingFlags为InvokeMeth...
一,使用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
其实有时候根据方法名称调用方法还是挺方便的,就是反射的带来的性能问题没有衡量过,都说性能不好,但是到底有多大影响,求解释?
推荐阅读
-
php中spl_autoload_register跟__autoload这两个方法调用场景的区别
-
ASP.NET Core Authentication认证实现方法
-
php 单元测试 phpunit ,如何mock类调用自身的方法?
-
Ruby小技巧:处理方法调用中的nil
-
android动态布局方法总结
-
discuz x3在DIY模块中调用伪静态不成功,显示动态链接的解决办法,discuzx3
-
Jquery调用webService远程访问出错的解决方法_jquery
-
ASP.NET Core 中使用EF Core 将实体映射到数据库表的方法(SQL Server)
-
java 第五章 方法定义及调用
-
使用ASP.NET Core支持GraphQL -- 较为原始的方法