通过反射调用动态调用方法

调用无返回值、无参数的方法

假如有一个BaseEntity类,我们要使用反射调用BaseEntity类中的A方法;首先我们必须要先声明一个Type类的实例:

Type baseType=typeof(BaseEntity);

再来我们要再声明一个MethodInfo类的实例,用来寻找BaseEntity类中的方法;现在我们要调用BaseEntity类中的A方法,所以我们代码可以这样写

MethodInfo MeInfo=baseType.GetMethod("A");

然后我们就可以使用MethodInfo的Invoke来调用方法

MeInfo.Invoke(baseType,null);

调用带返回值、带参数的方法

我们同样还是调用BaseEntity类中的A方法,不过这次我们调用的A方法中是带有两个string参数及具有string返回值。

我们只要回上以下代码就行:

object [] param =new object [] {"方法的参数1","方法的参数2"};

再把Invoke()的参数改改成以下代码就OK:

string Str=(string)MeInfo.Invoke(baseType,param);

看到这样可能有人会问如果我传入的是一个参数也要用object数组吗?为什么要进行类型转换呢?

是的,同样的要使用object数组来传参,至于原因嘛我们不去深究,我们只要知道微软在对MethodInfo类封装中Invoke方法是以object数组传方法参数,返回object值。

调用泛型方法

我们还是使用上面的BaseEntity类,还是调用类中的A方法;但这个A方法是一个泛型方法,所以我们在声明MethodInfo类的实例之后加入以下代码:

MethodInfo meinfo = MeInfo.MakeGenericMethod(new Type[] { typeof(T) });//T是泛型参数,如果带两个泛型参数改成下面代码

//MethodInfo meinfo = MeInfo.MakeGenericMethod(new Type[] { typeof(泛型1),typeof(泛型2) });

  调用私有方法、静态方法

     默认情况下GetMethod()方法会查找公有方法public,在第二个参数可以配置查找范围

.GetProperty("A", BindingFlags.NonPublic | BindingFlags.Static).GetValue(new hycy_Entlist(), null)
时间: 2024-11-19 21:09:13

通过反射调用动态调用方法的相关文章

动态调用动态库方法 .so

关于动态调用动态库方法说明 一.       动态库概述 1.  动态库的概念 日常编程中,常有一些函数不需要进行编译或者可以在多个文件中使用(如数据库输入/输 出操作或屏幕控制等标准任务函数).可以事先对这些函数进行编译,然后将它们放置在一些特殊的目标代码文件中,这些目标代码文件就称为库.库文件中的函数 可以通过连接程序与应用程序进行链接,这样就不必在每次开发程序时都对这些通用的函数进行编译了. 动态库是一种在已经编译完毕的程序开始启动运行时,才被加载来调用其中函数的库.其加载方式与静态库截然

C# 通过反射类动态调用DLL方法

网上看了很多关于反射的思路和方法,发现这个还算不错 //使用反射方: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //声明一个反射类对象 Assembly a

IOS开发反射和动态调用总结

和java一样,Object-C也提供了反射的机制. 每一个类都有一个Class,获取Class有以下三种方法. // insert code here... //通过字符串获取class Class clazz = NSClassFromString(@"NSString"); NSLog(@"clazz的类型是%@",clazz); //直接用calzz 来创建对象 id str = [[clazz alloc] init]; //通过对象来获取class NS

基于反射的动态调用-不止是code和oop,还有类加载方案

先给出基础类资源的代码,很容易理解,不做过多介绍: 1 package oop; 2 interface t { 3 public static final String name="zhangph"; 4 } 5 public class Father implements t{ 6 private static int mem; 7 static { 8 System.out.println("这是父类");//因为你不曾常用反射,所以加上这段代码显示区别 9

http请求POST和GET调用接口以及反射动态调用Webservices类

此代码是API.WebSrvices动态调用的类,做接口调用时很实用. Webservices动态调用使用反射的方式很大的缺点是效率低,若有更好的动态调用webservices方法,望各位仁兄不吝贴上代码. using System; using System.IO; using System.Net; using System.Text; using System.Web; using System.Collections.Generic; using System.CodeDom.Compi

.Net——动态调用方法

一,使用InvokeMember 思路:在类型的type的对象上调用InvokeMember方法,传递要在其上调用方法的对象,并指定BindingFlags为InvokeMethod.根据方法签名,可能还需要传递参数. 示例(对普通方法和对静态方法的调用): #region 动态调用方法--使用InvokeMember对一般方法的调用 //Type t = typeof(Calculator); //Calculator c = new Calculator(1, 2); //int resul

C#中Winform动态调用Webservice的方法(转)

一般情况下winform调用webservice时步骤 1添加服务引用---高级----添加web引用------填写url--添加web引用即可完成对webservice的引用 让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务. 如果需要动态调用WebService,要实现这样的功能: publicstaticobjectInvokeWebService(stringurl,  stringmethodname,object[] args) 其中,url是Web服务的地址,me

.NET简谈反射(动态调用)

我们继续C#基础知识的学习,这篇文章主要要讲的是我们C#程序员迈向高级C#程序员的关键性的一步. 有的朋友会说事实不是这样的,我不用反射就不能开发吗?当然可以,但是用与不用肯定是不一样的,任何复杂抽象的分层架构或者说是复杂的设计模式均是建立在这些基础之上的,比如我们要进行模块化.组件化开发,要严格的消除模块之间的耦合,要进行动态接口调用.这样的强大而灵活的系统开发,必须要用反射才行:任何技术都有它存在的价值和意义,只要我们把它用在合适的位置就能发挥出惊人的力量:能尽可能的减少我们编写的代码,更能

WebService的创建和部署以及通过反射动态调用WebService

一.在ASP.NET中创建WebService 首先我们先创建一个ASP.NET Web应用程序,此处我们以VS2017为例 点击新创建的项目,右键添加新建项,选择Web服务,输入名称点击添加 这样我们的基础的WebService就创建好了 接下来我们填加一个webservice的测试方法,并且打上特性标签WebMethod,只有打上特性标签WebMethod并且访问修饰符设置为public后外部才能调用到该方法 using System; using System.Collections.Ge