Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi中的AOP支持_Delphi_Aop - Fatal编程技术网

Delphi中的AOP支持

Delphi中的AOP支持,delphi,aop,Delphi,Aop,是否可以在Delphi中进行面向方面的编程?我对本地支持以及第三方解决方案感兴趣 我没有想用AOP解决的具体问题,只是对研究AOP感兴趣。Delphi更高版本中的ClassHelper允许一些非常有限级别的AOP类型行为。您可以使用类帮助器将行为注入到其他类中,而无需从这些类中降序。它允许重写现有方法,然后可选地调用该现有方法 限制是必须为特定类及其子体声明ClassHelper。此外,一个类只能有一个ClassHelper 这些方法类似于C#中的扩展方法。AOP取决于两件事: 将附加代码注入

是否可以在Delphi中进行面向方面的编程?我对本地支持以及第三方解决方案感兴趣


我没有想用AOP解决的具体问题,只是对研究AOP感兴趣。

Delphi更高版本中的ClassHelper允许一些非常有限级别的AOP类型行为。您可以使用类帮助器将行为注入到其他类中,而无需从这些类中降序。它允许重写现有方法,然后可选地调用该现有方法

限制是必须为特定类及其子体声明ClassHelper。此外,一个类只能有一个ClassHelper


这些方法类似于C#中的扩展方法。

AOP取决于两件事:

  • 将附加代码注入现有代码单元的能力
  • 在应该注入代码的位置设置条件的机制
这通常被称为代码编织。它是程序转换更广泛研究中的一个专业

JIT编译语言比静态编译程序有更多的选项来实现代码编织,因为字节码/IL中保留了更多的信息。它们还支持反射,反射提供了在运行时操作代码的能力

Delphi.NET和Prism对这些功能的访问权限与任何其他.NET语言相同

我知道Delphi Win32有两个AOP框架。第一个是,已经提到过。第二个是。这两个项目都采用类似的AOP方法。它们结合使用RTTI和巧妙的指针操作来拦截方法调用,因此您可以在方法调用之前或之后运行其他代码。您将横切特性定义为框架AOP类的子类。通过将方法名作为字符串参数传递给AOP框架,可以注册想要拦截的方法

这两个框架仍在积极开发中,实际上比AOP的范围更大。不幸的是,文档有点稀疏(在Infra的例子中,大部分是葡萄牙语)

2004年,另一个项目尝试通过源代码编织实现AOP,并取得了一些成功。基本上,他们在称为DMS的通用程序转换工具的基础上构建了aspect weaver,并在编译之前使用它将代码注入delphi源文件。他们面向方面的语言主要受AspectJ的影响

有到原始论文和演示文稿的链接,以及一些转换过程的视频


也可以使用运行时代码插装来实现这一点。它是一些探查器在不修改原始源代码的情况下将计数器和堆栈跟踪注入到运行代码中的一种技术。可以使用类似的技术将横切关注点注入静态编译的可执行文件中。该项目就是一个很好的例子。

DSharp库具有AOP:

有关更多信息,请访问:

还可以看看。
它自Delphi 2010起就在RTL中,允许您对类上的所有虚拟方法进行OnBefore、OnAfter等调用。

仅此调用就应该涵盖您需要使用的部分,而不是比运行时编织快得多的编织

对于Delphi prism,现在有现成的AOP支持:AOP也可以使用影子虚拟方法表(VMT)完成,编织并不是唯一的选择。