Petshop4 0學習筆記二 利用反射程式設計

2021-05-10 13:25:55 字數 1601 閱讀 5234

(petshop.idal.icategory)assembly.load("petshop.sqlserverdal").createinstance("petshop.sqlserverdal.category");

分析這句**:

(petshop.idal.icategory)強型別轉換

assembly類,可以引導程式集、瀏覽程式集的元資料和構成部分、發現程式集中包含的型別以及建立這些型別的例項。

assembly.load()方法,引導程式集

createinstance,從載入的程式集中查詢某個型別,並建立它的例項,就是被強型別轉換的物件。

這種用法是利用反射程式設計的一種常見用法,此外,assembly類還有一些方法:

getname(),獲取此程式集的assemblyname(完整描述該程式集的唯一標識);

getmodule(string),獲取該程式集中的指定模組;

getmodules(),獲取作為此程式集的一部分的所有模組;

gettype(),獲取當前例項的型別;

gettype(string),獲取程式集例項中具有指定名稱的type物件。

gettypes,獲取此程式集中定義的所有型別,是乙個型別陣列。

loadmodul(string, byte),載入此程式集的內部模組。

tostring(),返回程式集的全名,即所謂的顯示名稱。

具體用法例項如下:

int majorversion=typeof(webbhelper).assembly.getname().version.major;   //獲取當前程式集webbhelper版本資訊

stream stream=typeof(webbhelper).assembly.getmainfestresourcestream(fullfilename);   //獲取當前程式集中的資源位元組陣列

利用反射實現控制項陣列的功能:現如今在乙個webform上有10個textbox,分別命名為textbox1,textbox2,……textbox10,想一次獲取他們的值或對它們賦值,而不想寫10次,用下面的方法:

for(int i=1;i<=10;i++)

object o=this.gettype().getfield("textbox"+i.tostring(),bindingflags.instance|bindingflags.nonpublic).getvalue(this);

textbox text=(textbox)o;

text.text="你好"; //這樣通過迴圈,實現了對這10個textbox控制項的賦值

解釋下,

this.gettype(),獲取當前的窗體類(page)

getfield("textbox"+i.tostring(),bindingflags.instance|bindingflags.nonpublic),在page類當中獲取名稱為"textbox"+i.tostring()的例項(控制項),實際上是通過搜尋當前窗體類,bindingflags.instance|bindingflags.nonpublic就是指定搜尋的條件。

getvalue(this),其實就是獲取該例項的所有資訊(屬性、方法)

這種方法非常實用,可以在很大程度上優化我們的**。

Petshop4 0學習日誌2

2 petshop的訂單處理 petshop中對訂單的處理主要使用了策略模式 同步和非同步 1 同步 petshop系統預設的就是同步策略 在bll業務層的order中,插入資料時,首先利用反射機制確定使用的策略模式,預設選擇同步機制。對於,同步機制,系統直接呼叫idal,對資料進行操作,插入資料。...

petshop4 0學習筆記之多執行緒

一直搞web開發,每天接觸最多的就是asp.net css js,看了看petshop,原來多執行緒在web專案中也有很大作用.加之以前一直對多執行緒不甚了解,這次就這個機會來一次自我補習吧.啟用乙個新執行緒有四種寫法 第一種 使用thread與threadstart parameterizedth...

PetShop 4 0 安裝問題

1.無法直接啟動帶有 類庫輸出型別 的專案 若要除錯此專案,請在此解決方案中新增乙個引用庫專案的可執行專案。將這個可執行專案設定為啟動項 經查詢處理方法 出錯原因 在同乙個解決方案裡面有多個專案,被設定成啟動專案的是類庫專案,類庫專案是被編譯成dll檔案給別的專案使用的,是不可執行的專案.解決辦法 ...