C 動態建立和動態使用程式集 類 方法 欄位等

2021-08-26 03:14:56 字數 2362 閱讀 2087

首先需要知道動態建立這些型別是使用的一些什麼技術呢?其實只要相關動態引導程式集呀,類呀,都是使用反射,那麼動態建立也一樣使用的是反射,是屬於反射的技術!也就是將物件或者資料對映成乙個物件或者程式集儲存起來而已。

首先我們需要了解每個動態型別在.net中都是用什麼型別來表示的。

程式集:system.reflection.emit.assemblybuilder(定義並表示動態程式集)

建構函式:system.reflection.emit.constructorbuilder(定義並表示動態類的建構函式)

自定義屬性:system.reflection.emit.customattributebuilder(幫助生成自定義屬性 使用建構函式傳遞的引數來生成類的屬性)

列舉:system.reflection.emit.enumbuilder(說明並表示列舉型別)

事件:system.reflection.emit.eventbuilder(定義類的事件)

字段:system.reflection.emit.fieldbuilder(定義並表示字段。無法繼承此類)

區域性變數:system.reflection.emit.localbuilder(表示方法或建構函式內的區域性變數)

方法:system.reflection.emit.methodbuilder(定義並表示動態類的方法(或建構函式))

模組:system.reflection.emit.modulebuilder(定義和表示動態程式集中的模組)

引數:system.reflection.emit.parameterbuilder(建立或關聯引數資訊 如:方法引數,事件引數等)

屬性:system.reflection.emit.propertybuilder(定義型別的屬性 (property))

類:system.reflection.emit.typebuilder(在執行時定義並建立類的新例項)

1.如何動態建立它們了

程式集:簡單來說就是乙個以公共語言執行庫(clr)為宿主的、版本化的、自描述的二進位制檔案。(說明:定義來自c#與.net3.5高階程式設計(第四版))

模組:類似於以前的單元,用於分割不同的類和型別,以及資源(resource, 資源記錄就是字串,圖象以及其它資料,他們只在需要的時候才會被調入記憶體)。型別的meta資訊也是模組的一部分。多個模組組建成乙個程式集。

所謂動態就是在程式執行時,動態的建立和使用。

直接看**吧,其實超級簡單。

現在開始動態建立類:

建構函式:system.reflection.constructorinfo(發現類建構函式的屬性並提供對建構函式元資料的訪問權)

事件:system.reflection.eventinfo(發現事件的屬性並提供對事件元資料的訪問權)

字段:system.reflection.fieldinfo(發現字段屬性並提供對字段元資料的訪問權)

方法:system.reflection.memberinfo(獲取有關成員屬性的資訊並提供對成員元資料的訪問)

成員:system.reflection.memberinfo(獲取有關成員屬性的資訊並提供對成員元資料的訪問)

引數:system.reflection.parameterinfo(發現引數屬性並提供對引數元資料的訪問)

屬性:system.reflection.propertyinfo (發現屬性 (property) 的屬性 (attribute) 並提供對屬性 (property) 元資料的訪問)

同樣這是一種延伸閱讀,只是先對這些進行了解,如果不知道的話,可能對動態的使用型別就無法下手了。

今天我做了乙個demo,先上demo吧,然後在來解釋程式是如何執行的。

/動態建立的動態型別

執行的主要方法

staticvoidmain(stringargs)

;objectciparamsvalues=newobject;

constructorinfoci=classtype.getconstructor(ciparamstypes);

objectvector=ci.invoke(ciparamsvalues);

//呼叫方法

objectmethedparams=newobject{};

console.writeline(classtype.invokemember("get_property",bindingflags.invokemethod,null,vector,methedparams));

console.readkey();

}我建立了乙個類,類裡建立了有乙個字段、有乙個引數的建構函式、乙個屬性、有乙個引數的建構函式和乙個方法。用有引數的建構函式來初始化欄位myfield,然後呼叫get_field方法返回myfield欄位的值。控制台程式顯示「hello world!!!」

C 動態建立和動態使用程式集 類 方法 欄位等

先需要知道動態建立這些型別是使用的一些什麼技術呢?其實只要相關動態引導程式集呀,類呀,都是使用反射,那麼動態建立也一樣使用的是反射,是屬於反射的技術!也就是將物件或者資料對映成乙個物件或者程式集儲存起來而已。首先我們需要了解每個動態型別在.net中都是用什麼型別來表示的。程式集 system.ref...

建立和使用動態連線庫

摘自 一 建立動態連線庫 1.建立乙個dll專案 2.新增乙個名為 mymathfuncs 的簡單類,以執行常見的算術運算,如加 減 乘和除。應與以下內容類似 示例 mathfuncsdll.h namespace mathfuncs 請注意此 方法宣告中的 declspec dllexport 修...

建立和使用動態鏈結庫 C

我們將建立的第一種型別的庫是動態鏈結庫 dll 使用 dll 是一種重用 的絕佳方式。您不必在自己建立的每個程式中重新實現同一例程,而只需對這些例程編寫一次,然後從需要該功能的應用程式引用它們即可。本演練涵蓋以下內容 本主題假定您具備 c 語言的基礎知識。從 檔案 選單中,選擇 新建 然後選擇 專案...