c# 通过反射获取类的字段值

c# 通过反射获取类的字段值

ID:16285254

大小:21.53 KB

页数:4页

时间:2018-08-08

c# 通过反射获取类的字段值_第1页
c# 通过反射获取类的字段值_第2页
c# 通过反射获取类的字段值_第3页
c# 通过反射获取类的字段值_第4页
资源描述:

《c# 通过反射获取类的字段值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、FieldInfo..::.GetValue方法在派生类中被重写时,返回给定对象支持的字段的值。命名空间: System.Reflection程序集: mscorlib(在mscorlib.dll中)如果该字段是静态的,则忽略obj。对于非静态字段,obj应是继承或声明该字段的类的实例。请注意,GetValue的返回类型为Object。例如,如果此字段包含一个Boolean基元值,则返回带有相应Boolean值的Object的实例。在返回该值以前,GetValue将检查用户是否有访问权限。静态字段:obj.GetType

2、().GetField(字段名).GetValue(null);实例非静态字段:typeof(类名).GetField(字段名,BindingFlags标识).GetValue(对象实例变量);示例:获取静态字段的值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事件添加了事件响应函数(EventHandler)。现在需要用一个扩展的自定义控件来通过代码方式动态替换现有控件。这样,即需要将原控件的事件处理函数复制过来。而事件对象不能被复制,只能通过反射的方式来实

6、现。深入分析:控件的Click事件定义方式可能如下。其中Events为EventHandlerList类型的集合对象,用来存储所有事件(在System.ComponentModel.Component中定义)。EventClick为object类型的对象,作为区分各类Event的key。订阅和取消事件的实现方式如下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然后,由于封装的原因,我们无法直接执行如上调用。因此,反射发挥作用了:varhandler=(EventHandler)GetDelegate(toolStripButton,"EventClick"

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。