反射泛型方法

最近在拜读C# in depth这本书,在书中的反射泛型方法这一小节中遇到了一个小问题

class Class1
        {
             internal static void PrintType<T>()
            {
                Console.WriteLine(typeof(T));
            }
        }

static void main(string args[])
{
                    Type typeClass1 = typeof(Class1);
            MethodInfo method = typeClass1.GetMethod("PrintType");
            MethodInfo contructMethod = method.MakeGenericMethod(typeof(string));
            contructMethod.Invoke(null, null);
            Console.ReadKey();
}

主函数运行后没有输出,并且出现一个Bug:
 MethodInfo contructMethod = method.MakeGenericMethod(typeof(string)); 未将对象引用到实例。

经过排查发现是由于PrintType函数的访问权限的问题。

在获取反射泛型方法时,该方法的访问权限必须为public,其他的权限不能让MakeGenericMethod()获取该方法。

时间: 2024-07-29 12:32:22

反射泛型方法的相关文章

Java基础学习笔记【12】Reflect反射(2)

使用反射来创建对象(1)public T newInstance():只能创建非private,无参的构造方法的对象:好比 new 类() 1 2 Class<Teacher> clz = Teacher.class; Teacher t2 = clz.newInstance(); (2)先得到一个构造器,调用构造器里的一个方法, T newInstance(Object... initargs) . initargs表示构造器的需要的实际参数 1 2 3 Constructor<Tea

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

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

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为

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

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 s

Java:反射

初识Java反射机制: 从上面的描述可以看出Java的反射机制使得Java语言可以在运行时去认识在编译时并不了解的类/对象的信息,并且能够调用相应的方法或修改属性的值.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的内部信息(包括其modifiers(如public, static等).superclass(如Object).interfaces(如Serializable),也包括fields和methods的所有信息),动态地生

2015第22周六Java反射、泛型、容器简介

Java的反射非常强大,传递class, 可以动态的生成该类.取得这个类的所有信息,包括里面的属性.方法以及构造函数等,甚至可以取得其父类或父接口里面的内容. obj.getClass().getDeclaredMethods();//取得obj类中自己定义的方法, 包括私有的方法. obj.getClass().getMethods();//取得obj类中自己定义的方法及继承过来的方法, 但私有方法得不到. 同样, 对field也是一样,obj.getClass().getDeclaredFi

Java-泛型(Generic)深入使用(与反射结合使用)

泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉“类型”信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样.由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用反射得到集合,再调用其add方法即可. 总结:泛型只在编译器时期有效,在运行时期无效,在运行时期,它指明的“类型”信息会去掉如: 1.泛型(只针对引

反射-Spring管理Bean,注入Bean属性的反射机制。

#反射 1.是JAVA API,是Java提供的现成的类!! --接受API提供的功能! 2. 是Java提供的动态执行机制,动态加载类,动态创建对象,动态访问属性,动态调用方法. ##反射用途 1. eclipse 中解析类的结构使用了反射 2.JUnit识别被测试方法使用了反射 -- JUnit3 利用了反射查找test开头的方法 -- JUnit4 利用了反射解析@Test查找测试方法 3.Spring 管理Bean对象,注入Bean属性使用了反射 --利用反射创建Bean对象实例 --利