Java和C#是目前面向對象語言的表明性語言,Java語言是面向語言是表明。spa
今天主要就這兩個面嚮對象語言的反射機制討論一番, 其實要想了解反射本質,必需要深刻的瞭解Java虛擬機和C#的運行時機制。要深刻了解這些語言運行時具體機制和流程,往後會轉本出一篇博客商討,今天這裏只是討論使用反射的基本使用流程,以及反射基本原理。對象
Java是經過Class對象來洞悉類的所有信息,而C#則是經過Type類來洞悉類的所有信息。要想使用反射機制,必需要知道反射機制簡單原理,任何一個類,不管是Java或者是C#,本質仍是在運行時對類作了什麼處理。簡單來講,這些面嚮對象語言定義的類,加載到內存都都會生成一個與之對應的Class對象或者Type對象,Class對象和Type對象涵蓋這個對象所有信息,因此要想使用反射,咱們必需要獲取去到類的這個惟一的對象Class或者Type。
內存
Java要想獲取一個類Class對象,加入有com.abaojin.Person類:
get
Class c1 = Class.forName("com.abaojin.Person");
博客
Class c2 = com.abaojin.Person.class;
虛擬機
Class c3 = (new com.abaojin.Person()).getClass();
class
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進行獲取,這裏就不專門進行討論,具體能夠查看具體的方法。