在程式開發中,經常需要呼叫到外部的dll,所以需要反射技術,動態的引導程式集,方便呼叫.
例如我們建立乙個這樣的類:
namespace
user
public
showname(
string
name)
public
string
name
set}
private
string
name;
public
void
showme()
public
static
intmain()}}
在一般情況下,我們只需要在**中這樣呼叫就可以:
public
class
program}
如果需要在程式執行時動態載入,就需要用到assembly類來實現,注意:(把上面的第一段**,生成乙個叫user.dll)
一、assembly.load
這個方法接受乙個assemblyname例項作為乙個引數,返回對應的程式集,實現的方法如下:
public
class
program
object
user
=a.createinstance(t.fullname);
object
name
=new
object[1
];
//新建乙個陣列,把引數傳進去
name[0]
="alex";
methodinfo setname
=t.getmethod(
"set_name
");
//這個set_name就是name的set方法
setname.invoke(user, name);
//這裡把name引數傳進去
methodinfo show
=t.getmethod(
"showme");
show.invoke(user,
null
);console.readline(); }}
這裡輸出的結果為:
get_name
set_name
showme
main
tostring
equals
gethashcode
gettype
i'm alex
二、assembly.loadform方法
該方法根據程式集的檔名與路徑來引導程式集。
三、assembly.loadwithpartialname方法
該方法使用部分名稱從應用程式目錄或從全域性程式集快取引導程式集。
當然還要他們還可以實現部分引用,也就是可以通過程式集的名稱,版本,公鑰等等,只要在後面加上
assembly a = assembly.load("user,version=1.0.0.0")來控制就可以了
c 反射中Assembly類動態引導程式集
c 反射中assembly.load及assembly.load.createinstance方法介紹 1 assembly.load 程式集 程式集名稱即dll名稱 用assembly.load 引導程式集的順序是怎樣的呢?首先它會去全域性程式集快取查詢 然後到應用程式的根目錄查詢,最後會到應用程...
C 在使用Assembly引導程式集時失敗
錯誤現象 進行外掛程式讀取時出現錯誤 嘗試從乙個網路位置引導程式集,在早期版本的 net framework 中,這會導致對該程式集進行沙盒處理。此發行版的 net framework 預設情況下不啟用 cas 策略,因此,此載入可能會很危險。如果此載入不是要對程式集進行沙盒處理,請啟用 loadf...
C 利用反射實現動態引導程式集簡單案例
反射可以不但用來讀取元資料,還可以使用反射從編譯時還不清楚的型別中動態建立程式集,此案例摘自c 高階程式設計。首先先建立乙個控制台應用程式,然後新增乙個類庫,類庫名稱為calculatorlib,如下圖所示 calculatorlib程式集中有兩個方法,引數是x和y,乙個方法返回兩數之和,另乙個方法...