c# 通過反射獲取類的字段值

c# 通過反射獲取類的字段值

ID:16285254

大?。?1.53 KB

頁數(shù):4頁

時間:2018-08-08

c# 通過反射獲取類的字段值_第1頁
c# 通過反射獲取類的字段值_第2頁
c# 通過反射獲取類的字段值_第3頁
c# 通過反射獲取類的字段值_第4頁
資源描述:

《c# 通過反射獲取類的字段值》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。

1、FieldInfo..::.GetValue方法在派生類中被重寫時,返回給定對象支持的字段的值。命名空間:?System.Reflection程序集:?mscorlib(在mscorlib.dll中)如果該字段是靜態(tài)的,則忽略obj。對于非靜態(tài)字段,obj應是繼承或聲明該字段的類的實例。請注意,GetValue的返回類型為Object。例如,如果此字段包含一個Boolean基元值,則返回帶有相應Boolean值的Object的實例。在返回該值以前,GetValue將檢查用戶是否有訪問權限。靜態(tài)字段:obj.GetType

2、().GetField(字段名).GetValue(null);實例非靜態(tài)字段:typeof(類名).GetField(字段名,BindingFlags標識).GetValue(對象實例變量);示例:獲取靜態(tài)字段的值classMyClass{publicstaticStringval="test";publicstaticvoidMain(){FieldInfomyf=typeof(MyClass).GetField("val");Console.WriteLine(myf.GetValue(null));val="hi

3、";Console.WriteLine(myf.GetValue(null));}}示例:獲取對象實例的字段值publicclassMyClass{publicstringmyFieldA;publicstringmyFieldB;publicMyClass(){myFieldA="Apublicfield";myFieldB="Anotherpublicfield";}}publicclassFieldInfo_GetValue{publicstaticvoidMain(){MyClassmyInstance=newM

4、yClass();TypemyType=typeof(MyClass);try{//GettheFieldInfoofMyClass.FieldInfo[]myFields=myType.GetFields(BindingFlags.PublicBindingFlags.Instance);Console.WriteLine("顯示{0}類型實例各字段的值.",myType);for(inti=0;i

5、{1}",myFields[i].Name,myFields[i].GetValue(myInstance));}}catch(Exceptione){Console.WriteLine("Exception:{0}",e.Message);}}}下面舉一個很實用的例子有一個控件對象,它擁有Click事件,用戶給Click事件添加了事件響應函數(shù)(EventHandler)。現(xiàn)在需要用一個擴展的自定義控件來通過代碼方式動態(tài)替換現(xiàn)有控件。這樣,即需要將原控件的事件處理函數(shù)復制過來。而事件對象不能被復制,只能通過反射的方式來實

6、現(xiàn)。深入分析:控件的Click事件定義方式可能如下。其中Events為EventHandlerList類型的集合對象,用來存儲所有事件(在System.ComponentModel.Component中定義)。EventClick為object類型的對象,作為區(qū)分各類Event的key。訂閱和取消事件的實現(xiàn)方式如下publiceventEventHandlerClick{add{base.Events.AddHandler(EventClick,value);}remove{base.Events.RemoveHandl

7、er(EventClick,value);}}EventClick定義如下internalstaticreadonlyobjectEventClick;EventHandlerList類中有一個特殊的方法:Find,定義如下publicsealedclassEventHandlerList:...{...privateListEntryFind(objectkey);...privatesealedclassListEntry{...internalDelegatehandler;...}}實際上,我們可以按如下方式獲得

8、EventHandlercontrol.Events.Find(control.EventClick).handler然后,由于封裝的原因,我們無法直接執(zhí)行如上調(diào)用。因此,反射發(fā)揮作用了:varhandler=(EventHandler)GetDelegate(toolStripButton,"EventClick"

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。