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