【发布时间】:2021-04-28 16:51:45
【问题描述】:
如何将方法函数传递给另一个对象?在 Delphi 中这样的事情是可能的吗?
例如,我正在尝试在 DataModule 中创建一个 PopupMenu,因为此 PopupMenu 将在应用程序的多个位置使用。
PopupMenu 将使用特定函数,例如:GetCustomer(),它返回 TCustomer,可以在其上执行各种操作。
创建和使用 DataModule 的每个表单/框架都希望将 GetCustomer() 的自定义实现传递给它。
我想写这样的东西:
TGetCustomerFunc = function: TCustomer of object;
然后在 DataModule 上创建一个字段/属性:
TPopupDataModule = class(TDataModule)
public
{ Public declarations }
GetCustomer: TGetCustomerFunc;
end;
GetCustomer 将被创建PopupDataModule 的每个框架分配一个方法,并具有自己的特定实现。
但是,function: TCustomer of object; 的语法无效。
有什么建议可以解决这个问题吗?
【问题讨论】:
-
“但是,
function: TCustomer of object; 不是有效的语法。”。是的,它完全有效。 -
@lurker:
function: TCustomer是一个返回TCustomer的无参数函数,而function: TCustomer of object是一个返回TCustomer的无参数方法(因此,它有一个隐藏的Self参数)。 -
@AndreasRejbrand 谢谢,我不熟悉那种语法。
-
@AndreasRejbrand:你说得很对。我的错。不知何故,它没有一次编译,可能是因为我的语法不正确。
-
@RaelB 显示的代码完全有效。那么为什么你认为不是呢?您是否收到编译器错误?如果是这样,究竟是什么错误?请提供minimal reproducible example。