国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

動態加載類的原理——元數據的使用

2024-07-21 02:22:53
字體:
來源:轉載
供稿:網友


在使用.net創建的程序或組件時,元數據(metadata)和代碼(code)都存儲于“自成一體”的單元中,這個單元稱為裝配件。我們可以在程序運行期間訪問這些信息。
在system.reflection中有這樣一個class————assembly,我們可以通過它來加載一個裝配件。方法如下:
assembly assm=assembly.loadfrom(filename);
其中filename是要加載的裝配件的文件名稱(帶路徑)。

接下來,我們就可以通過使用system.reflection內提供的info classes來獲取裝配件中的信息了。首先讓我們看一下這些info classes:

methodinfo 獲取某個“成員函數”的信息,并提供對此“成員函數”元數據的訪問。
parameterinfo 獲取某個“參數”的信息,并提供對此“參數”元數據的訪問。
constructorinfo 獲取某個“構造函數”的信息,并提供對此“構造函數”元數據的訪問。
propertyinfo 獲取某個“屬性”的信息,并提供對此“屬性”元數據的訪問。
fieldinfo 獲取某個“數據成員”的信息,并提供對此“數據成員”元數據的訪問。
eventinfo 獲取某個“事件”的信息,并提供對此“事件”元數據的訪問。

上面列出的這些classes(除parameterinfo外)的訪問操作,要通過一個type對象來完成。比如我們要獲得一個裝配件的“成員函數”就要這樣做:
system.reflection.assembly ass=system.reflection.assembly.loadfrom(filename);
type[] tp=ass.gettypes();
system.reflection.methodinfo[] mi=tp[0].getmethods();

使用同樣的方法我們還可以得到其它的信息,如下:
獲得“構造函數”信息:system.reflection.constructorinfo[] ci=tp[0].getconstructors();
獲得“屬性”信息:system.reflection.propertyinfo[] pi=tp[0].getproperties();
獲得“數據成員”信息:system.reflection.fieldinfo[] fi=tp[0].getfields();
獲得“事件”信息:system.reflection.eventinfo[] ei=tp[0].getevents();

此外,我們可以通過parameterinfo類來獲取“成員函數”和“構造函數”的參數信息,如下:
獲取“成員函數”的參數信息:system.reflection.parameterinfo[] pi=mi[0].getparameters();
獲取“構造函數”的參數信息:system.reflection.parameterinfo[] pi=ci[0].getparameters();

parameterinfo類有兩個重要的屬性:name和parametertype。通過它們我們可以得到“參數”的名稱和數據類型。

由于.net將class的信息以“元數據”的形式封裝在程序或是組件中,又提供了一系列可以獲取“元數據”的方法,所以我們可以程序運行期間來動態的訪問這些信息。

具體的應用例子可以參看我的另一篇《動態加載類》。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建始县| 南召县| 湘阴县| 教育| 沂源县| 丰原市| 夹江县| 白城市| 安龙县| 萝北县| 星子县| 呼玛县| 东辽县| 晋城| 奉贤区| 丰顺县| 治县。| 灵寿县| 肃北| 宜春市| 大方县| 陇川县| 孝义市| 临清市| 渭源县| 太仓市| 五台县| 新闻| 海淀区| 锡林浩特市| 本溪| 鄂州市| 砀山县| 昭苏县| 滨州市| 大渡口区| 鄂托克旗| 乐清市| 沅江市| 原阳县| 丁青县|