C#通过反射调用泛型方法

1.有一个类,类中有一个泛型方法。我们要通过反射来调用这个泛型方法。
  命名空间为:Transight.HQv4.BLL
  类名为RVCBLL
  有两个方法
  a.public List makeTest()
        {
            return null;
        }
  b.public List<T> makeTest<T>()
        {
            return null;
        }
2.反射,实质就是把命名空间的字符串反射成我们想要的对象

例:Assembly bizAssembly = Assembly.Load("Transight.HQv4.BLL");//反射命名空间       var obj = bizAssembly.CreateInstance("Transight.HQv4.BLL.RVCBLL", true,

BindingFlags.Default, null, new object[]{this.CommonParam}, null, null)//创建类实例,带构造函数的实例,相当于var obj=new RVCBLL(this.CommonParam)

若是调用普通的a方法,我们直接这样就可以

Type test=obj.GetType();

MethodInfo mi1=test.GetMethod("makeTest");

mi1.Invoke(obj,null)

3.那我们要调用泛型方法b要怎么做呢?
  以上的反射步骤不变,要在mi1的基础上构造泛型方法
     Type test=obj.GetType();
     MethodInfo mi1=test.GetMethod("makeTest");
     MethodInfo mi2 = mi1.MakeGenericMethod(test);
     mi1.Invoke(obj,null)

时间: 2024-11-09 15:39:34

C#通过反射调用泛型方法的相关文章

c#简易反射调用泛型方法

// 所谓程序集的简单理解,存在不同项目中(不是解决方案),即using前需要引用**.dll 1.调用当前类文件下的方法public List<T> GetByCondition<T>(OperateLogModel model)MethodInfo serviceMethod = this.GetType().GetMethod("GetByCondition");// 初始化方法信息,this表示当前对象,如调用其它对象可以代入.object modelO

c# 使用反射调用泛型方法

参考博文:http://www.cnblogs.com/lichence/archive/2012/03/13/2393758.html 出现报错"不能对 ContainsGenericParameters 为 True 的类型或方法执行后期绑定操作." 原因:Find<T>方法是泛型方法,属于开放构造方法(不能直接invoke调用) 解决方法:先调用Method newMethod=mth.MakeGenericMethod(param);获得可用方法, 其中param为

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

调用无返回值.无参数的方法 假如有一个BaseEntity类,我们要使用反射调用BaseEntity类中的A方法:首先我们必须要先声明一个Type类的实例: Type baseType=typeof(BaseEntity); 再来我们要再声明一个MethodInfo类的实例,用来寻找BaseEntity类中的方法:现在我们要调用BaseEntity类中的A方法,所以我们代码可以这样写 MethodInfo MeInfo=baseType.GetMethod("A"); 然后我们就可以使

原 .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)

大家都说反射耗性能,但是到底有多耗性能,哪些反射方法更耗性能:这些问题却没有统一的描述. 本文将用数据说明反射各个方法和替代方法的性能差异,并提供一些反射代码的编写建议.为了解决反射的性能问题,你可以遵循本文采用的各种方案. 本文内容 反射各方法的性能数据 反射的高性能开发建议 创建类型的实例 反射获取 Attribute 反射调用公共 / 私有方法 使用预编译框架 附本文性能测试所用的代码 所有反射相关方法 IsDefined 和 GetCustomAttribute 的专项比较 参考资料 反

[LinqPad妙用]-在Net MVC中反射调用LinqPad中的Dump函数

LinqPad有个非常强大的Dump函数.这篇讲解一下如何将Dump函数应用在.Net MVC Web开发中. 先看效果: 一.用.Net Reflector反编译LinqPad.exe,找出Dump函数的定义: 经过反编译发现,Dump函数调用了LINQPad.ObjectGraph.Formatters.XhtmlWriter类中FormatObject函数,把对象转成了Html. 二.反射调用FormatObject函数: 由于FormatObject函数是protect类型,不能直接调用

C#反射调用程序集类中方法

建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> /// public static int Add(int x, int y) { r

利用反射调用注解

利用反射调用注解 package net.jeesite.java; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.Method; @Retention(value = RetentionPolicy.RUNTIME) @interface Meta { String length(); String name(); int

java反射调用方法

1:Class类中的方法 public Method getDeclaredMethod(String name, Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException 参数: name - 方法名 parameterTypes - 参数数组 返回: 该类与指定名和参数相匹配的方法的 Method 对象 2:Method类中的方法; public Object invoke(Object obj,

Android 反射调用资源和id

本文介绍利用反射调用资源和id 提出问题: app有一种叫应用墙的广告,应用墙是在你的程序中弹出一个Activity来展示广告,比如豌豆广点通等,集成的时候需要将资源通过复制添加到自己的项目中,但是app墙的代码是封装好的jar代码.不是源码,看不到,也不能修改.那么jar中的代码是如何加载本地资源的呢? 自己的项目中加载资源的时候都是通过本项目的R文件来初始化资源,R文件是你自己的项目的R文件,和项目有关,如果第三方的jar文件中使用的R是来第三方SDK项目中的资源R,代码更换了项目之后铁定了