五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C#知識梳理——反射

2023-08-16 11:04 作者:羞澀男孩小小明  | 我要投稿

1、反射的基本信息

exe/dll文件主要區(qū)別,exe文件有入口

exe文件入口

metadata元數(shù)據(jù)—描述exe/dll文件的數(shù)據(jù)清單 記錄了有哪些類、屬性等之類的-----通過反射(reflection)獲取元數(shù)據(jù)中的數(shù)據(jù)

【1】???? 更新程序時(更新自己的Dll)

【2】???? 使用別人的DLL文件(這種可以讀取別人的私有的內(nèi)容)

?

反射是什么?:操作metadata的一個工具(類庫,用來讀取或者操作元數(shù)據(jù)—類 方法 特性 屬性字段 )

為什么要通過反射間接去操作呢?:1、因為我們需要動態(tài),不要寫死的。2、讀取私有的內(nèi)容

使用場合:比如 asp.net MVC ---ORM---LOC---AOP 幾乎所有的框架都會使用這個反射

?

總而言之—反射,即一個工具,用來操作元數(shù)據(jù)。

2、通過反射加載DLL文件

每個項目都會生成一個dll 不管是什么方法引用dll 都最好先把所引用文件放到當(dāng)前目錄下 不然只能通過完全路徑引用了

通過反射創(chuàng)建對象

步驟:獲取dll->獲取type=>object創(chuàng)建對象->類型轉(zhuǎn)換褪去object的皮->正常使用

通過反射創(chuàng)建對象 (帶參數(shù))

其實帶參數(shù)的和不帶參數(shù)的是一樣的,區(qū)別就是一個方法的不同傳參、調(diào)用、匹配

步驟:獲取dll->獲取type=>object創(chuàng)建對象(按照參數(shù)的類型、個數(shù)、順序在Activator.CreateInstance)中寫入,其會自動匹配->類型轉(zhuǎn)換褪去object的皮->正常使用

通過反射創(chuàng)建對象(私有構(gòu)造函數(shù))

什么是私有構(gòu)造函數(shù)?à含有私有字段,不能直接實例化,因為私有構(gòu)造函數(shù)有其保護機制。

步驟:獲取dll->獲取type=>object創(chuàng)建對象(Activator.CreateInstance創(chuàng)建對象時要傳入true)中寫入,其會自動匹配->類型轉(zhuǎn)換褪去object的皮->正常使用

這個功能還用在單例模式里 (一個對象只能創(chuàng)建一次)

通過反射創(chuàng)建對象(泛型類)

步驟:獲取dll->獲取type(獲取到類名稱,根據(jù)泛型格式,利用占位符`來規(guī)范格式)=> genertype.MakeGenericType 根據(jù)泛型要求使用typeof給泛型賦類 ->object創(chuàng)建對象(Activator.CreateInstance創(chuàng)建對象時要傳入true)中寫入,其會自動匹配->類型轉(zhuǎn)換褪去object的皮->正常使用

通過反射調(diào)用方法

其實在上文已經(jīng)提到過了一種方法,即通過反射調(diào)用類型,創(chuàng)建對象,然后可以調(diào)用方法。

這是另外一種方式。

反射與MVC和AOP

MVC本質(zhì)還是通過反射起的作用

我們反射,其實是dll文件名稱+類型名稱+方法名稱=我們的方法

而MVC


看起來是不是很像MVC的結(jié)構(gòu)?其實打開這個網(wǎng)頁,也就是調(diào)用了這個方法。

反射在MVC中有缺點存在:不能通過參數(shù)匹配的方式去匹配方法!所以要在MVC中加入請求類型用以區(qū)分(像重載這種情況)

APO==是一種面前切面編程。是OOP對象技術(shù)的一種補充。

APO==是一種面前切面編程。是OOP對象技術(shù)的一種補充。

通過反射調(diào)用私有方法

前邊講到過用反射創(chuàng)建對象(私有構(gòu)造函數(shù)),通過反射調(diào)用私有方法與之還是有些區(qū)別的。

步驟:獲取dll->獲取type(獲取到類名稱)=> object創(chuàng)建對象-> MethodInfo 創(chuàng)建容器保存type。GetMethon獲得的方法類型,而在GetMethon中使用BindingFlags 與|邏輯運算符給出組合條件參數(shù)-> ??methodInfo.Invoke(obj,new object[] { xxx} );正常使用

通過反射調(diào)用泛型方法

之前講過通過反射創(chuàng)建泛型對象

普通類中泛型方法的調(diào)用---

步驟:獲取dll->獲取type(獲取到類名稱)=> object創(chuàng)建對象-> MethodInfo 創(chuàng)建容器保存type.GetMethon獲得的方法類型-> MethodInfo .MakeGenericMethod(new object[] { typeof(int), typeof(string)...... }確定方法的類型和個數(shù)–> methodInfo.Invoke(obj,new object[] { xxx} );正常使用

泛型類中泛型方法的調(diào)用—

步驟:獲取dll->獲取type(獲取到類名稱,用占位符獲取參數(shù)個數(shù))=> 獲取typenew(MakeGenericType確定泛型方法的參數(shù)類型)=> object創(chuàng)建對象-> MethodInfo 創(chuàng)建容器保存typenew.GetMethon獲得的方法類型-> MethodInfo .MakeGenericMethod(new object[] { typeof(int), typeof(string)...... }確定方法的類型和個數(shù)–> methodInfo.Invoke(obj,new object[] { xxx} );

通過反射操作字段和屬性等成員---


C#知識梳理——反射的評論 (共 條)

分享到微博請遵守國家法律
申扎县| 临猗县| 永福县| 大安市| 莒南县| 罗江县| 汨罗市| 绥德县| 涞源县| 砀山县| 长白| 专栏| 宁武县| 清流县| 固安县| 依安县| 阿瓦提县| 孟州市| 察雅县| 西和县| 基隆市| 花莲县| 祁连县| 安西县| 陕西省| 巴塘县| 长沙县| 郑州市| 丹阳市| 镇远县| 云阳县| 莱阳市| 潞西市| 个旧市| 新化县| 长泰县| 南丹县| 诸暨市| 合山市| 鹿邑县| 陈巴尔虎旗|