我有一个带有函数getsomedata的组件(key:string; listener:Tlistener)
哪个侦听器声明如下事件:
Tlistener = procedure (name,age,sex:string) of object ;
但在我的组件监听器管理器中,当我添加新的监听器时,将监听器参数作为TObject类,如。
ListenerManager.addListener(key:string;Listener:TObject);
当我编译代码时,我收到了错误消息
实际参数不够
因为事件对象(TListener)和ListenerManager参数(TObject)。
完整功能代码示例。
procedure getsomedata (key:string;listener:Tlistener) ;
begin
ListenerManager.addListener(key,listener); //error Here >>> addListener input parameters (key:string;Listener:TObject);
end;
我该如何解决?
答案 0 :(得分:1)
在此代码中:
procedure getsomedata (key:string;listener:Tlistener) ;
begin
ListenerManager.addListener(key,listener);
end;
您正在尝试将TListener
类型的变量传递给addListener
的第二个参数。该参数的输入为TObject
。
现在,TListener
被输入为
procedure(name,age,sex:string) of object;
过程类型的变量不能传递给TObject
类型的参数。
要确切知道正确的代码是什么样子很难,因为问题不包含足够的背景信息。也许addListener
应该收到TListener
而不是TObject
。但这只是猜测。如果您需要更完整的建议,那么您需要在问题中添加足够的详细信息。
您在评论中说明:
我无法将参数类型
TObject
更改为TListener
。
在那种情况下,你被困住了。根本无法将TListener
转换为TObject
。现在,您可以实现一个具有TListener
类型的单个字段的类,并传递它。但我非常怀疑这是非常正确的解决方案。