Java和C#是目前面向对象语言的代表性语言,Java语言是面向语言是代表。
今天主要就这两个面向对象语言的反射机制讨论一番, 其实要想了解反射本质,必须要深入的了解Java虚拟机和C#的运行时机制。要深入了解这些语言运行时具体机制和流程,日后会转本出一篇博客商讨,今天这里只是讨论使用反射的基本使用流程,以及反射基本原理。
Java是通过Class对象来洞悉类的全部信息,而C#则是通过Type类来洞悉类的全部信息。要想使用反射机制,必须要知道反射机制简单原理,任何一个类,无论是Java或者是C#,本质还是在运行时对类做了什么处理。简单来说,这些面向对象语言定义的类,加载到内存都都会生成一个与之对应的Class对象或者Type对象,Class对象和Type对象涵盖这个对象全部信息,所以要想使用反射,我们必须要获取去到类的这个唯一的对象Class或者Type。
Java要想获取一个类Class对象,加入有com.abaojin.Person类:
Class c1 = Class.forName("com.abaojin.Person");
Class c2 = com.abaojin.Person.class;
Class c3 = (new com.abaojin.Person()).getClass();
C#要想获取一个类的Type对象,同样有com.abaojin.Person类:
Type t1 = Type.GetType("com.abaojin.Person");
Type t2 = typeof(com.abaojin.Person);
Type t3 = (new com.abaojin.Person()).GetType();
上面也说过,Java的Class对象和C#的Type对象,可以洞悉一个类的全部信息,也就是说可以获取这个类的变量,方法,无论是共有变量和是私有变量,都由Class或Type提供API进行获取,这里就不专门进行讨论,具体可以查看具体的方法。