反射动态调用DLL类库测试
定義:
可以在運行時獲得.NET中每一個類型(包括類、結構、委托、接口和枚舉等)的成員,包括方法、屬性、事件,以及構造函數等。還可以獲得每個成員的名稱、限定符和參數等。有了反射,即可對每一個類型了如指掌。如果獲得了構造函數的信息,即可直接創建對象,即使這個對象的類型在編譯時還不知道
同一個功能不用反射同樣能實現,那為什么一定要用反射,一直不太明白他的作用,但C#里推崇較甚,今天到網上查了段反射動態調用DLL類庫的代碼,調試了下通過了
說明:通過System.Reflection.Assembly動態調用classTest.dll 中GetStr(string strValue)的方法,而不做添加引用操作
????? classTest.dll 包含方法 public static string GetStr(string strValue);參數是什么則返回什么
??????測試DLL下載:/Files/lmjob/classTest.rar
?
代碼如下:
System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFile("D:\\ProjectTest\\classTest\\classTest\\bin\\Debug\\classTest.dll");? //通過路徑載入動態庫
??????? Type t = asm.GetType("classTest.Class1");? //得到Class
??????? System.Reflection.ConstructorInfo conn = t.GetConstructor(new Type[0]); //獲取沒有參數的構造函數?
??????? object a1 = conn.Invoke(new object[0]);? //調用沒有參數的構造函數Invoke,返回object它其是a類
??????? System.Reflection.MethodInfo meth = t.GetMethod("GetStr", new Type[] { typeof(String) }); //獲取參數類型為string,函數名為GetStr的方法
??????? string aa = meth.Invoke(a1, new object[] { "我是中國人" }).ToString(); //在a1上調用GetStr方法,參數為"我是中國人"
??????? Response.Write("值:" + aa);??? //輸入值??? 正確結果為“我是中國人”
補充一、通過Load反射創建實例:
System.Reflection.Assembly ass = System.Reflection.Assembly.Load("Xys.METS.Model");
Xys.METS.Model.DUTY_INFO info = (Xys.METS.Model.DUTY_INFO )ass.CreateInstance
("Xys.METS.Model.DUTY_INFO");
info.DutyName = "aaa";
Response.Write(info.DutyName);
?
總結
以上是生活随笔為你收集整理的反射动态调用DLL类库测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为啥五轮摩托车费油?
- 下一篇: 一切即将刚开始