隨筆-9  評(píng)論-168  文章-266  trackbacks-0
          //*********創(chuàng)建實(shí)例***********
          Type t = typeof(ClassTest);//表示類型聲明:類類型、接口類型、數(shù)組類型、值類型、枚舉類型、類型參數(shù)...。
          object obj = Activator.CreateInstance(t);//通過反射創(chuàng)建對(duì)象實(shí)例,如果是靜態(tài)類則不須實(shí)例化
          //obj = ass.CreateInstance("ReflectionTest.ClassTest"); //類的全限定名.命名空間.類名
          //*********創(chuàng)建和調(diào)用方法***********
          MethodInfo method = t.GetMethod("WriteString"); //搜索具有指定名稱的公共方法。
          String s = (String)method.Invoke(obj, new Object[] { "123" });//反射類的對(duì)象實(shí)例,方法參數(shù) 
          //靜態(tài)方法         
          method = type.GetMethod("StaticWriteString");
          method.Invoke(nullnew string[] { "test" }); //如果是靜態(tài)方法,第1個(gè)參數(shù)則忽略,設(shè)為null  
           
          //無參的靜態(tài)方法
          method = type.GetMethod("NoneParaWriteString");  
          method.Invoke(nullnull);//無參則第2個(gè)參數(shù)設(shè)為null.
           
          System.Diagnostics.Trace.WriteLine(s);//輸出到"調(diào)試--窗口--即時(shí)窗口"
           
          C#反射學(xué)習(xí)時(shí)幾點(diǎn)注意內(nèi)容:
          1.指定類庫文件必須使用絕對(duì)路徑,不能使用相對(duì)路徑(其實(shí)感覺有點(diǎn)不合理,不太方便)
          3.第5行如果反射的類使用的是靜態(tài)方法,則第1個(gè)參數(shù)須調(diào)為null
          4.由于這個(gè)方法有兩個(gè)參數(shù),可以用這種Object的方法指定參數(shù)也可以直接寫method.Invoke(obj, new Object[] { "test", 1 });
          5.調(diào)用的方法是一個(gè)靜態(tài)方法,這時(shí)候Invoke的時(shí)候,對(duì)于第一個(gè)參數(shù)是無視的,也就是我們寫什么都不會(huì)被調(diào)用,即使我們隨便new了一個(gè)any這樣的Object,當(dāng)然這種寫法是不推薦的。但是對(duì)應(yīng)在例子1種我們?nèi)绻鸌nvoke的時(shí)候用了類型不一致的實(shí)例來做為參數(shù)的話,將會(huì)導(dǎo)致一個(gè)運(yùn)行時(shí)的錯(cuò)誤。
          6.第三個(gè)例子是一個(gè)調(diào)用無參數(shù)靜態(tài)方法的例子,這時(shí)候兩個(gè)參數(shù)我們都不需要指定,用null就可以了。
          再說一個(gè)問題,如果調(diào)用的類是靜態(tài)類的時(shí)候,需要注意一個(gè)問題,肯定我們會(huì)想到一個(gè)問題,靜態(tài)類是不能實(shí)例化的,這時(shí)候,31行的類的實(shí)例化的方法我們就不需要了,直接使用Invoke就可以實(shí)現(xiàn),否則將會(huì)出現(xiàn)運(yùn)行時(shí)的錯(cuò)誤,同樣的道理,第一個(gè)參數(shù)將會(huì)被無視,只要我們傳對(duì)了參數(shù)就可以了。
          posted on 2013-09-25 15:40 紫蝶∏飛揚(yáng)↗ 閱讀(633) 評(píng)論(0)  編輯  收藏 所屬分類: C#

          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 民权县| 恭城| 乐亭县| 三江| 舞钢市| 瑞金市| 新民市| 吕梁市| 德惠市| 西昌市| 宁乡县| 米泉市| 进贤县| 连平县| 太保市| 清流县| 乌恰县| 历史| 抚顺县| 多伦县| 长垣县| 洛阳市| 宜宾县| 惠州市| 华坪县| 富民县| 黔西县| 揭东县| 曲水县| 垦利县| 钟祥市| 淮北市| 开原市| 阿城市| 兴和县| 兴义市| 朝阳市| 长沙市| 灵宝市| 蓝田县| 安远县|