在使用.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的資訊以「元資料」的形式封裝在程式或是元件中,又提供了一系列可以獲取「元資料」的方法,所以我們可以程式執行期間來動態的訪問這些資訊。
具體的應用例子可以參看我的另一篇《動態載入類》。
類的動態載入 2
1.通過new建立物件是靜態載入,如圖一,假如此時word類和excel類並不存在,office類是不可以通過編譯的,再假如乙個類中要對很多類進行例項化,都是通過new例項化的,那麼,但凡有乙個類出問題了,那麼整個大類就不會通過編譯。2.如圖二,我們使用的是動態載入類的方法,在編譯此類時,並不會載入...
使用echarts動態載入資料
顯示形式 1 2 3 var mychart 路徑配置 require.config 使用 require echarts echarts chart line 使用柱狀圖就載入bar模組,按需載入 function ec subtext 單位 padding 10 tooltip legend x...
python元類的使用 Python的元類如何使用
這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。今天我的任務就是徹底明白什麼是元類,一起看看。要搞懂元類,我們還是先從物件說起。python 一切皆物件,這句話你一定有聽說過 現在你就聽說了 乙個數字是物件,乙個字串是物件,乙個列表是物...