.net反射技术

.net反射技术

ID:27481459

大小:261.69 KB

页数:73页

时间:2018-12-04

.net反射技术_第1页
.net反射技术_第2页
.net反射技术_第3页
.net反射技术_第4页
.net反射技术_第5页
资源描述:

《.net反射技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、12.20老赵点滴-追求编程之美先做人,再做技术人员,最后做程序员。打造国内最好的.NET技术博客。FastReflectionLibrary2009-02-0101:25by老赵,9397visits全文英文版:FastReflectionLibrary这是我在CodePlex上创建的一个项目,它的网址是http://www.codeplex.com/FastReflectionLib,使用MicrosoftPublicLicense(Ms-PL),您可以随意在自己的产品中使用它的全部或部分代码。这个项目用到了我在《方法的直接调用,反射调用与Lambda

2、表达式调用》和《这下没理由嫌Eval的性能差了吧?》两篇文章里用到的做法,并加以提炼和扩展发布的项目——随便搞搞,留个印记,也供以后参考。基本使用方式反射是.NET中非常重要的功能。使用反射来构造对象、调用方法或是访问属性是某些项目中常用的做法之一(例如ORM框架)。众所周知,与一个成员的直接访问相比,反射调用的性能要低好几个数量级。FastReflectionLib提供了一种简便的方式,使一些常用反射调用的性能得到大幅提高。如下:usingSystem;usingSystem.Reflection;usingFastReflectionLib;names

3、paceSimpleConsole{classProgram{staticvoidMain(string[]args){PropertyInfopropertyInfo=typeof(string).GetProperty("Length");MethodInfomethodInfo=typeof(string).GetMethod("Contains");strings="HelloWorld!";//getvaluebynormalreflectionintlength1=(int)propertyInfo.GetValue(s,null);//get

4、valuebytheextensionmethodfromFastReflectionLib,//whichismuchfaster7312.20老赵点滴-追求编程之美先做人,再做技术人员,最后做程序员。打造国内最好的.NET技术博客。intlength2=(int)propertyInfo.FastGetValue(s);//invokebynormalreflectionboolresult1=(bool)methodInfo.Invoke(s,newobject[]{"Hello"});//invokebytheextensionmethodfrom

5、FastReflectionLib,//whichismuchfasterboolresult2=(bool)methodInfo.FastInvoke(s,newobject[]{"Hello"});}}}在得到了PropertyInfo或MethodInfo对象之后,我们可以使用GetValue或Invoke方法来访问属性或调用方法。在FastReflectionLib中为PropertyInfo、MethodInfo等对象定义了对应的扩展方法,于是我们就可以使用这些扩展方法(从代码上看来,基本上只是在原来的方法之前加上“Fast”)来进行调用,与之前

6、的方法相比,新的扩展方法性能有极大的提高。直接使用各工作对象各FastXxx方法实际上是将PropertyInfo等对象作为Key去一个Cache中获取对应的工作对象,然后调用工作对象上对应的方法。因此,直接调用工作对象可以获得更好的性能。各工作对象类型的对应关系如下:·PropertyInfo:IPropertyAccessor·MethodInfo:IMethodInvoker·ConstructorInfo:IConstructorInvoker·FieldInfo:IFieldAccessor我们可以使用FastReflectionCaches.M

7、ethodInvokerCache来获取一个IMethodInvoker对象:staticvoidExecute(MethodInfomethodInfo,objectinstance,inttimes){IMethodInvokerinvoker=FastReflectionCaches.MethodInvokerCache.Get(methodInfo);object[]parameters=newobject[0];for(inti=0;i

8、0老赵点滴-追求编程之美先做人,再做技术人员,最后做程序员。打造国

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

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

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