C 反射動態呼叫dll中的方法,並返回結果

2021-06-09 12:32:48 字數 1477 閱讀 4004

最近在看工廠開發模式,發現用到了反射,之前只聽說過也沒怎麼用過;所以花了點時間重新溫習了一遍;

反射的作用是動態的載入某個dll(程式集),並執行該程式集中的某個方法,並返回結果;當然也可以給該方法傳遞引數

直接上**:

namespace assembly_name

}}

上邊寫乙個測試類,命名空間是assembly_name,類名是assembly_class,類名下有個方法show_str引數是string型別,並且返回值是string型別;

接下來做呼叫dll,先貼**:

//引導程式集(dll檔案位址),使用assembly類

//獲取型別,引數(命名空間+類)

type type = assembly.gettype("assembly_name.assembly_class");

//建立該物件的例項,object型別,引數(命名空間+類)

object instance = assembly.createinstance("assembly_name.assembly_class");

//設定show_str方法中的引數型別,type型別;如有多個引數可以追加多個

type params_type = new type[1];

params_type[0] = type.gettype("system.string");

//設定show_str方法中的引數值;如有多個引數可以追加多個

object params_obj = new object[1];

params_obj[0] = "jiaopeng";

//執行show_str方法

object value = type.getmethod("show_str", params_type).invoke(instance, params_obj);

解釋下:

loadfile("")方法載入的是要載入的dll絕對位址;

object value = type.getmethod("show_str", params_type).invoke(instance, params_obj);
執行方法這裡用到了四個引數:

第乙個「show_str」是要執行的方法名(必須的)

第二個params_type是「show_str」的引數型別,如果該方法沒有引數這個可以為null

第三個instance是該程式集類的例項(必須的)

第四個params_obj是"show_str"方法的引數值,如果該方法沒有引數這個可以為null

最後的value就是你執行「show_str」方法的返回值

最終value結果是"有引數,引數是:jiaopeng"

這裡有個疑問,有的類就沒有命名空間,不知道這個是怎麼處理的;而我們這裡用的到必須是命名空間+類名;也試過不加命名空間的是不行報錯;

以上僅是個人看法

C 反射動態呼叫dll中的方法,並返回結果

最近在看工廠開發模式,發現用到了反射,之前只聽說過也沒怎麼用過 所以花了點時間重新溫習了一遍 反射的作用是動態的載入某個dll 程式集 並執行該程式集中的某個方法,並返回結果 當然也可以給該方法傳遞引數 namespace assembly name 上邊寫乙個測試類,命名空間是assembly n...

C 反射呼叫dll中的方法

反射提供描述程式集 模組和型別的物件 type 型別 可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別,然後呼叫其方法或訪問器字段和屬性。如果 中使用了特性,可以利用反射來訪問它們 namespace assembly name public string assemb...

C 通過反射類動態呼叫DLL方法

個人覺得 反射 就是能按照規定 微軟.net 動態訪問特定程式集中物件的工具.網上找的 例子 使用反射方 using system using system.collections.generic using system.linq using system.text using system.re...