接上篇更新:
1.什么是反射
反射:Reflection,System.Reflection命名空間,是微軟提供的幫助類庫
反射加載dll,讀取程序集(Assembly),模塊(Module),類(Class),方法(Method)
Dll包括:IL和metada
IL:中間語言,標准的面向對象語言,但是不太好閱讀
Medata:元數據,數據清單,只是描述了類中有什么
反射破壞單例其實就是反射可以調用私有構造函數
2.反射的優缺點
優點:1.降低耦合性,提高自適應能力。[減少對象與對象之間的依賴,只需要知道類名(字符串),方法名(字符串),就可以調用]
2.允許程序創建和控制任何類的對象,無需提前硬編碼目標類[可以突破特定權限,可以做到普通方式無法做到的比如可以通過反射調用私有方法]
缺點:1.編寫比較困難,代碼量大,編寫的時候容易出錯
2. 性能問題,性能損耗大,經過測試:發現反射確實性能損耗比較大 普通方式:60, 反射:5470,確實讓我們無法接受,經過緩存優化之后發現,普通方式:42反射:80,對於性能損耗,大家要理性看待,因為執行的數量巨大,中間的這些性能損耗是可以忽略不計。
反射的使用
使用LoadFile加載程序集
使用LoadFrom加載程序集
使用反射獲取類型,創建對象
使用反射+簡單工廠+配置文件獲取類型,創建對象
反射選擇不同構造函數創建對象
反射調用方法
反射調用普通方法
反射調用有參數方法
反射調用重載方法
反射調用私有方法
反射調用靜態方法
反射調用泛型方法,泛型類
反射在普通類中調用泛型方法:
反射在泛型類中調用泛型方法:
另外一種:
反射操作類內屬性