c#進階之路-反射(筆記3)

一、學習準備
1、創建Runanmou.DB.Interface與Ruanmou.DB.Sqlserver類庫,以及項目主程序;
2、在第一個類庫下申明一個(Qury)查詢接口。在第二個類庫下完成接口的功能實現;
二、舊方法使用方式;
1、引用類名控件、實例化類庫;列:IdBhelper dbhelper=new DbHelper();
2、dbhelper.Qury();這是以往的使用接口下方法的方式;
三、(淺談)用配置文件打開動態申明使用的類庫;減少細節的實現;達到動態耦合,可根據項目需要隨時加載對應需要的類庫;

1、Assember assembly=Assember.Load("類庫名");//反射入口。動態加載dll的關鍵語句

2、type dbhelperType=assembly.gettype("Runanmou.DB.SqlServer.DBHelper");//基於類庫的完整名稱,找出類型
3、object odbHelper=Activator.CreateInstance(dbHelperType);//根據類型。創建對象
4、IDBHelper dbHelperReflction=(IDBHerlper)odbHelper;強制轉換也可is as判斷
5、dbHElperReflection.Query();//完成方法調用

四、根據配置文檔實現動態調用
1、引用配置文件命名空間System.Configuration
2、在配置文檔裏面申明字符串<appseeting><add key="Ruanmou.OB.Interface.IDBHelper" value="Ruanmou.DB.SQlserver.DBHelper,Ruanmou.DB.Sqlserver"></appseeting>
3、string nameSpace=ConfigurationManager.AppSetting["Ranmou.DB.interface.Idehelper"]
4、string[] nameSpaceArry=nameSpace.Split(',');
5、Assember assembly=Assember.Load(nameSpaceArry[1]);
6、type dbhelperType=assembly.gettype(ameSpaceArry[0]);
至此動態引用dll便也實現;更改配置文檔中的字符串可實現程序引用不同的方法、比如在有多個實現類的情況下、程序可在不更改代碼的情況下,在配置文件中選擇使用不同的方法;
五、反射方法、實現真正的不依賴接口調用方法
1、Assembly assembly =Assembly.lod("dll名");
2、type type =assembly.gettype("基於類的名稱,找出類型");
3、object oObject=Activator.CreateInstance(type);//根據類創建對象
4、MethodIndo 方法名=type.GetMethod("類的方法名");
    調用:方法名.invoke(oObject,null);調用無參方法
    調用:MethodIndo 方法名=type.GetMethod("方法名",new type[]{typeof(int)});//有參
    調用:方法名.invoke(oObject,new object[]{11});
5、調用私有方法
 MethodInfo 方法名=type.GetMethod("私有方法名",BindingFlags.Instance|BindingFlags.Public|BindingFlags.NonPublic);
方法名.Invoke(oObject,new object[]{"桑拉"});調用類裏私有有參方法


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章