gpt4 book ai didi

Delphi>请解释一下这个: type. ..对象的过程

转载 作者:行者123 更新时间:2023-12-03 14:42:23 25 4
gpt4 key购买 nike

我遇到了一些对我来说不熟悉的代码...

我从未真正见过对象过程的类型声明,而且我只是不知道看到重点了。为什么开发人员不能简单地保留 bool 类型的字段?

interface

type
TFinishedCaptureEvent = procedure(AFinished: Boolean) of object;

TFrameCard = class(TFrame)
...
private
FOnFinishedCapture: TFinishedCaptureEvent;
procedure DoUpdateMessage(AMessageType: TMessageType);
public
property OnFinishedCapture: TFinishedCaptureEvent read FOnFinishedCapture write FOnFinishedCapture;
end;

implementation

...

procedure TFrameCard.DoUpdateMessage(AMessageType: TMessageType);
begin
if Assigned(FOnFinishedCapture) then
FOnFinishedCapture(False);
...
end;

end.

最佳答案

让我们将其分为两部分以便于理解。首先,procedure(AFinished: Boolean) 不是 bool 变量,它是对以 bool 值作为参数的过程的引用。它基本上是一个过程头,除了没有过程名称,因为这只是一个类型定义。任何与此签名匹配的过程都可以分配给此变量。

对象的部分意味着这不仅仅是一个过程引用,而是一个方法引用;它必须属于一个对象。编译器需要知道其中的区别,以便它可以将对象的 self 指针与过程指针一起存储,以便可以正确调用它,正如其他发布者所指出的那样。

基本上,这是声明一个新的事件处理程序,这是 Delphi 中非常常见的模式。这与 VCL 在各处所做的事情是一样的。当您创建按钮并分配 OnClick 处理程序时,它必须是对象的过程(发送者:TObject)。您的表单为按钮提供了一个引用其本身和事件处理程序过程的方法引用,然后当有人单击按钮时,按钮使用该信息调用表单上的处理程序。

这段代码正在做同样的事情。它提供了一种在 DoUpdateMessage 运行时通知某些外部对象的方法,使用标准的 Delphi 习惯用法进行事件通知。

关于Delphi>请解释一下这个: type. ..对象的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4626614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com