属性和索引器的反射调用和emit

属性和索引器的反射调用和emit

ID:33781312

大小:81.00 KB

页数:4页

时间:2019-03-01

属性和索引器的反射调用和emit_第1页
属性和索引器的反射调用和emit_第2页
属性和索引器的反射调用和emit_第3页
属性和索引器的反射调用和emit_第4页
资源描述:

《属性和索引器的反射调用和emit》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、属性和索引器的反射调用和Emit反射调用属性属性其实背后就是两个方法,编译器在编译XXX属性时,实际产生了get_XXX和set_XXX两个方法,这两个方法根据属性类型可以是静态或者非静态的,方法是public,运行环境直接可以调用。看这样一个类:classProgram{       staticintid;       publicstaticintId       {           get           {               Console.WriteLine("get");   

2、            returnid;           }           set           {               Console.WriteLine("set");               id=value;}}}Program有一个属性:Id,背后是一个字段id。编译这句话:Program.Id=43;IL是:ldc.i4.s43callvoidMgen.Program::set_Id(int32)可以看出来,程序执行根本没有所谓的“属性”这一概念,最终就是函数调用。这

3、些方法都是有“specialname”修饰符,所以编译器会特殊对待这些方法,而在运行时刻,它们就是普通的方法。比上面Id属性set的背后方法:set_Id.methodpublichidebysigspecialnamestaticint32get_Id()cilmanaged因此,属性的反射使用有两种方法,一种是用内置的PropertyInfo,另一种是直接得到属性的背后方法。另外PropertyInfo也提供GetGetMethod和GetSetMethod方法来返回属性背后的方法。代码:classPro

4、gram{       staticintid;       publicstaticintId       {           get           {               Console.WriteLine("get");第4页               returnid;           }           set           {               Console.WriteLine("set");               id=value;      

5、     }       }       staticvoidMain(string[]args)       {           vartype=typeof(Program);           //通过属性的背后方法           varmethod=type.GetMethod("get_Id");           method.Invoke(null,null);           //通过反射中的属性信息           varprop=type.GetProperty("I

6、d");           prop.GetValue(null,null);           //PropertyInfo.GetSetMethod/GetGetMethod           prop.GetSetMethod().Invoke(null,newobject[]{123});       }}输出:getgetset反射调用索引器索引器就是一个有参数的,特殊名称的属性。它就是一个属性,当然本质上跟属性一样都是方法。一般名称是”Item“。从PropertyInfo的GetIndex

7、Parameters方法可以返回该索引器的参数。代码:classProgram{       publicintthis[intarg1,intarg2]       {           get           {               Console.WriteLine("get");               returnarg1;           }           set           {               Console.WriteLine("set");第4

8、页           }       }       staticvoidMain(string[]args)       {           vartype=typeof(Program);           varpro=newProgram();           vararg=newobject[]{123,456};           //通过属性的背后方法          

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

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

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