思维的乐趣

Enjoy it
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.NET中的反射

Posted on 2010-06-07 14:50  szh114  阅读(1396)  评论(0编辑  收藏  举报

  关于反射,我先看了书,然后在园子里面一搜,就又发现打仗贴啦,哈哈

白话讲反射技术 --- 适合初学者入门引导

关于反射技术

谈吉日嘎拉的《白话反射技术》及其他(技术篇)

谈吉日嘎拉的《白话反射技术》及其他(吵架篇)

 

恩,都看完大概也了解了。

  前几天就把内容简单列出来,然后大致瞅了两眼,发现挺复杂的,也听说做为一个低手反射用得不是很经常,因此就摞下没看,果然,过几天就忘得没影儿了。然后我就杯具了--前几天笔试一题目就是:“简述反射与序列化”   。。。。。  我就郁闷了半天,只对序列化写了几句,反射白在那儿了。(人永远也无法选择自己被测试的方式)

  回来后就马上补这一块知识,但是反射这个不在具体应用场景中,还是挺难把握的。

  大致就了解到,反射是在运行时动态分析,操纵和创建对象的机制,它直接依赖于程序集元数据。

  在.NET中,反射可以使代码查找代码本身,并能够分析,操纵和创建对象,这些对象不是窗口,订货单或散列表,而是在.NET程序集中定义的.NET类型的实例。由于在代码中遇到的每一个对象均是.NET类型的实例,因此意味着开发人员能够编写处理任何对象的代码。

  举例来说,反射提供了一个用于编写完成后期绑定代码的清晰,逻辑化的方式,即使在OPTION STRICT下该方式也有效。

  另一个例子:ASP.NET是一个在WEB服务器上运行的程序,当服务器接收到以.ASPX结尾的WEB页请求时,它会将请求传递给ASP.NET 程序。ASP.NET要标识包含构成页的代码的文件,且如果在此之前没有这样做过的话,还要将这些文件编译到.NET程序集。该程序集包含一个或多个.NET类,并包含传递请求页时标记所需要的逻辑代码。ASP.NET 用于创建服务于具体请求的类的机制在一定程度上依赖于反射。ASP.NET页面类继承自名为Page的.NET基类,该类包含了各种功能,用于利用反射创建构成页的全部控件,HOOK事件处理程序,以及对构成页的全部项设置必须的初始属性。所编写的每一个ASP.NET页是一个新类,但ASP.NET运行时利用反射来保证开发人员不必在每一页复制冗长的样板代码。在这种情况下,反射提供了使代码在类继承的基本系统之外重用的机制。

  因此,反射只是一个基础,关键点在于如何利用反射进行动态编程。(to be continued)

      20110424补记:

      最近在项目中用到了反射,主要是因为在做UT的时候发现很多方法,以及很多属性很不容易构造,或者MOCK出来,然后我直接用反射获得私有成员变量,然后直接用反射来调用私有方法来做测试,非常的方便。