Delphi中是否有类似于Java监听器的等效物?

7

我只是好奇。我知道 Delphi 中定义事件的两种方式:使用回调原理和 Windows 消息原理。

然而,消息原理不是面向对象的,而回调仅适用于一个实例。

我想要一个好的解决方案,使两个不同的对象可以在事件触发后执行操作。

在 Java 中,我可以简单地添加另一个监听器。

有没有人知道 Delphi 中类似的方法来实现这个很棒的监听器原理?


Delphi FMX(也包括 VCL)似乎有一些“事件”(可能主要用于内部使用),以允许监视组件的生命周期。这对于设计容器可能非常有用。 - George Birbilis
3个回答

4

这些也被称为多播事件,Allen Bauer撰写了一篇名为使用泛型的多播事件的好文章,对该主题进行了很好的覆盖。

简而言之,多播事件不像Java C#中内置于语言/框架中,但可以通过一些额外的工作来模拟。泛型的引入使得这个过程变得更加简单。


1
谢谢,多播事件是Delphi中的术语。很遗憾它没有被纳入语言/IDE中。 - Geerten
请查看TApplicationEvents组件。它使用多播事件,而不使用泛型。 - Remy Lebeau

1

在SO上已经有一个类似的讨论,其中还包含了一些现有多播实现的链接。


0

实际上,这是一种称为观察者或监听器(http://c2.com/cgi/wiki?ObserverPattern)的设计模式。我猜你可以以这样的方式编写你的对象实现,即注册一个观察者列表,可以通知任何代码更改。


当然,但使用本地语言支持的标准解决方案会更好。 - Geerten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接