最近在看工廠開發模式,發現用到了反射,之前只聽說過也沒怎麼用過;所以花了點時間重新溫習了一遍;
反射的作用是動態的載入某個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...