反射获取泛型类、泛型方法

 1 using System;
 2 using System.Reflection;
 3
 4 namespace RFTest
 5 {
 6     //类ReflectionTest中定义了一个泛型函数DisplayType和泛型类MyGenericClass
 7     class ReflectionTest
 8     {
 9         //泛型类MyGenericClass有个静态函数DisplayNestedType
10         public class MyGenericClass<T>
11         {
12             public static void DisplayNestedType()
13             {
14                 Console.WriteLine(typeof(T).ToString());
15             }
16         }
17
18         public void DisplayType<T>()
19         {
20             Console.WriteLine(typeof(T).ToString());
21         }
22     }
23
24     class Program
25     {
26         static void Main(string[] args)
27         {
28             ReflectionTest rt = new ReflectionTest();
29
30             MethodInfo mi = rt.GetType().GetMethod("DisplayType");//先获取到DisplayType<T>的MethodInfo反射对象
31             mi.MakeGenericMethod(new Type[] { typeof(string) }).Invoke(rt, null);//然后使用MethodInfo反射对象调用ReflectionTest类的DisplayType<T>方法,这时要使用MethodInfo的MakeGenericMethod函数指定函数DisplayType<T>的泛型类型T
32
33             Type myGenericClassType = rt.GetType().GetNestedType("MyGenericClass`1");//这里获取MyGenericClass<T>的Type对象,注意GetNestedType方法的参数要用MyGenericClass`1这种格式才能获得MyGenericClass<T>的Type对象
34             myGenericClassType.MakeGenericType(new Type[] { typeof(float) }).GetMethod("DisplayNestedType", BindingFlags.Static | BindingFlags.Public).Invoke(null, null);
35             //然后用Type对象的MakeGenericType函数为泛型类MyGenericClass<T>指定泛型T的类型,比如上面我们就用MakeGenericType函数将MyGenericClass<T>指定为了MyGenericClass<float>,然后继续用反射调用MyGenericClass<T>的DisplayNestedType静态方法
36
37             Console.ReadLine();
38         }
39     }
40 }

原文地址:https://www.cnblogs.com/fanfan-90/p/11980016.html

时间: 2024-11-09 00:12:52

反射获取泛型类、泛型方法的相关文章

180530-反射获取泛型类的实际参数

文章链接:https://liuyueyi.github.io/hexblog/2018/05/30/180530-通过反射获取泛型类的实际参数/ 反射获取泛型类的实际参数 泛型用得还是比较多的,那么如何获取泛型类上实际的参数类型呢? 比如一个接口为 public interface IBolt<T, K> { } 现在给一个IBolt的具体实现类,可以获取到实际的参数类型么?下面几种case可以怎么获取实际的IBolt中的T和K类型呢? // 实现接口方式 public class ABol

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

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

java通过反射获取调用变量以及方法

一:反射概念 可以通过Class类获取某个类的成员变量以及方法,并且调用之. 二:通过反射获取方法.变量.构造方法 1 @Test 2 // 通过反射获取类定义的方法 3 public void testMethod() throws Exception { 4 @SuppressWarnings("rawtypes") 5 Class clazz = Class.forName("java.lang.String"); 6 Method[] m = clazz.g

反射-获取程序集的type

反射的基本概念 反射无处不在,我们天天在使用.Vs的智能提示,就是通过反射获取到类的属性.方法等.还有反编译工具也是通过反射实现. 反射:就是动态获取程序集的元数据(提供程序集的类型信息)的功能. Type类实现反射的一个重要的类,通过它我们可以获取类中的所有信息包括方法.属性等.可以动态调用类的属性.方法. 1,Type是对类的描述.如何获取Person类中的所有方法和属性? Person p = new Person(); Type tp = p.GetType();//获取当前实例的类型;

java反射获取对象的属性值和对象属性中的子属性值

近段时间在做web项目,前端使用的是jQuery EasyUI. 为方便需要,准备做一个前端通用的Datagird导出Excel功能,博主也考虑过思路和最终功能,1.前端选中行导出:2.当前页导出:3.当前过滤条件导出. 想偷懒在网上找找已有的代码改改,发现大部分只能满足个别需求,使用JS导出只能满足前端,使用代码才能实现3功能. ...... 好了,说了一堆废话,回归正题,本文是在做通用自定义字段导出时所需要,根据属性名去查找对象和子对象,找到对应属性值,抓取回来放到Excel中. 直接上代码

Android开发之通过反射获取到Android隐藏的方法

在PackageManger中,有些方法被隐藏了,无法直接调用,需要使用反射来获取到该方法. 比如方法:getPackageSizeInfo(),通过这个方法可以获取到apk的CacheSize,CodeSize,DataSize等信息,但是该方法是隐藏的,@hide. 遇到这种情况,需要使用反射: 1 try { 2 //通过反射,获取到PackageManager隐藏的方法getPackageSizeInfo() 3 Method getPackageSizeInfo = PackageMa

通过反射获取常量值

一:通过反射获取常量值,项目中有个需求需要将请求信息封装到javaBean中 但是请求信息比较特殊,需要通过编码去获取,而且编码是定义在接口类中的常量,所以为了方便 特别把这块功能封装起来 1:定义的常量 1 /** 2 * 3 */ 4 package com.hlcui.entity; 5 6 /** 7 * @author Administrator 8 * 9 */ 10 public interface ConstantsUtil { 11 12 public static inter

反射获取成员变量

Field Class.getField(String)方法可以获取类中的指定字段(可见的), 如果是私有的可以用getDeclaedField("name")方法获取,通过set(obj, "李四")方法可以设置指定对象上该字段的值, 如果是私有的需要先调用setAccessible(true)设置访问权限,用获取的指定的字段调用get(obj)可以获取指定对象中该字段的值 import java.lang.reflect.Constructor; import

java 通过反射获取调用类方法及属性

首先说下反射是什么?反射是Sun公司推出的一组API,此组API位于Java.lang.reflect中 反射的作用是编写工具(例如eclipse),编写框架,当然对于一般的程序,我们不可能用反射来做这些事,一般反射大多是用于在构建类的实例以及调用类方法及属性. ok! 了解了反射是什么以及反射的应用领域,那么就来看看Java中是怎么实现反射的吧 Student类 public class Student {     public String name;     public String g