反射
反射概念和關鍵類TYpe
- 程序集
- 經由編譯器編譯得到,進一步編譯執(zhí)行的中間產物
- dll文件
- 擴展:C語言編譯過程
- 預處理
- 編譯
- 匯編:目標文件
- 鏈接:可執(zhí)行文件
- 經由編譯器編譯得到,進一步編譯執(zhí)行的中間產物
- 元數據
- 描述數據的數據
- 程序或類型的數據,存放在程序集中
- 描述數據的數據
- 反射概念
- 運行時(程序加載到內存中變?yōu)檫M程)查看本身或其他程序的元數據的行為
- 反射作用
- 運行時得到所有元數據
- 運行時實例化對象,操作對象
- 運行時調用其他程序集里的代碼
- Type:類的反射信息類
- 獲取Type
- object.GetType()
- typeof(類名)
- Type.GetType("包含命名空間的類名")
- 指向同一類 元數據的Type引用指向同一個地址
- 獲取程序集
- Type.Assembly
- 獲取所有公共成員
- MemberInfo類
- Type.GetMembers()
- 獲取類的公共構造函數
- 獲取所有構造函數
- ConstructorInfo類
- type.GetConstructors()
- 獲取其中一個構造函數并執(zhí)行
- 得到構造函數傳入Type數組(構造函數形參)
- Type.GetContructor(new Type[0]) 無參構造
- Type.GetConstuctor(new Type[]{typeof(形參類型)})
- 執(zhí)行構造函數,傳入object數組(構造函數形參)
- ConstructorInfo.Invoke(null) 無參構造
- ConstructorInfo.Invoke(new object[]{實參})
- 得到構造函數傳入Type數組(構造函數形參)
- 獲取所有構造函數
- 獲取類的公共成員變量
- 獲取所有成員變量
- FieldInfo類
- Type.GetFields()
- 獲取指定名稱公共成員變量
- Type.GetField("成員變量名")
- 通過反射獲取和設置指定對象的值
- FieldInfo.GetValue(指定對象引用)
- FieldInfo.SetValue(指定對象引用)
- 獲取所有成員變量
- 獲取類的公共成員方法
- MethodInfo類
- 獲取所有公共方法
- Type.GetMethods()
- 獲取指定方法
- Type.GetMethod("方法名",new Type[]{typeof(形參類型)})
- 調用方法
- MethodInfo.Invoke(方法名,new object[]{實參})
- 獲取Type
反射關鍵類Assembly和Activator
- Activator
- 作用
- 快速實例化對象(靜態(tài)方法)
- 使用
- 無參構造
- Activator.CreateInstance(Type)
- 有參構造
- Activator.CreateInstance(Type,實參)
- 無參構造
- 作用
- Assembly
- 作用
- 加載程序集并使用程序集
- 使用
- Assembly類
- 加載指定程序集
- Assembly.Load("程序集名稱")同一文件下程序集
- Assembly.LoadFrom("路徑字符串")不同文件下程序集
- Assembly.LoadFile("路徑字符串")
- 加載程序集中的類對象
- Assembly.GetTypes()獲取所有元數據類
- Assembly.GetType("完整類名")
- 作用
- 類庫工程
- 純邏輯代碼,自身不可執(zhí)行,提供邏輯給別人用