轻量级AOP框架-移植python的装饰器(Decorator)到C#(思考篇)
2010-01-08 00:00:00 来源:WEB开发网核心提示: 执行改程序,可以得到如下的结果:回过头看看程序的特点,轻量级AOP框架-移植python的装饰器(Decorator)到C#(思考篇)(2),从源码可以了解到,Decorator的使用很简单,系统会顺序的进行前两步的动作,同时,直接放置在函数定义前即可,通过@xxx的方式放置
执行改程序,可以得到如下的结果:
回过头看看程序的特点,从源码可以了解到,Decorator的使用很简单,直接放置在函数定义前即可,通过@xxx的方式放置,系统就可以识别。下面我们研究下Decorator的一些特点。
1. Decorator的本质是一个函数,它可以有传入的参数,它需要返回一个函数对象(注意这儿两个函数的区别),因此,在程序中,名为 logger的Decorator返回了一个名为loggerWrapper的函数对象,同理,名为debugger的Decorator返回了一个名为 debuggerWrapper的函数对象,这是Decorator定义的第一要点:Decorator函数一定要返回一个函数对象。
2. Decorator返回的函数对象也是有要求的,因为这个返回的函数对象是系统在调用该函数的时候执行的,因此,系统调用该函数对象的时候会传入当前被装饰的函数对象(注意,这里可能并不是原始定义的函数对象),同时需要返回一个和被修饰的函数定义一致的函数供系统调用。对比代码中的定义,loggerWrapper函数接收一个fun的参数,很显然,该参数就是当前被修饰的函数对象,同时,它返回logging函数对象,该函数的定义和被修饰函数完全保持一致。
3. 系统在调用被修饰方法的时候,实际上是执行了第2点说明中返回的函数对象。也就是说,系统会对函数“偷梁换柱”,实际执行的并不是原来定义的函数体。至于原来定义的函数体是否会执行,那就要看Decorator的具体实现了。
4. 对于多个Decorator的情况,系统会顺序的进行前两步的动作,同时,系统对Decorator的处理是倒序的。
- ››AOP的两个应用:实体集更新(DateEntityListUpdate...
- ››AOP的两个应用:实体集更新(DateEntityListUpdate...
- ››轻量级数据交换格式 JSON轻松入门
- ››轻量级系统 Lubuntu 10.04 发布
- ››AOP 的利器:ASM 3.0 介绍
- ››轻量级AOP框架-移植python的装饰器(Decorator)到C...
- ››轻量级AOP框架-移植python的装饰器(Decorator)到C...
- ››轻量级开发的成功秘诀,第 4 部分: 轻量级容器的比...
- ››轻量级开发的成功秘诀,第 5 部分: 在保守公司进行...
- ››轻量级开发的成功秘诀,第 6 部分: 持久性策略
- ››轻量级开发的成功秘诀,第 7 部分: Java 替代方案...
- ››轻量级开发的成功秘诀,第 8 部分: Seaside
更多精彩
赞助商链接