0

我有带有函数 getsomedata 的组件(键:字符串;侦听器: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;

我该如何解决?

4

1 回答 1

1

在这段代码中:

procedure getsomedata (key:string;listener:Tlistener) ; 
begin
  ListenerManager.addListener(key,listener);
end;

您正在尝试将类型变量传递TListeneraddListener. 该参数的类型为 being TObject

现在,TListener输入为

procedure(name,age,sex:string) of object;

过程类型的变量不能传递给类型的参数TObject

很难确切地知道正确的代码是什么样的,因为问题不包含足够的背景信息。也许addListener应该收到 aTListener而不是 a TObject。但这只是一个猜测。如果您想要更完整的建议,那么您需要在问题中添加足够的细节。


您在评论中声明:

我无法将参数类型更改TObjectTListener.

在这种情况下,你被卡住了。根本不可能将 aTListener转换为 a TObject。现在,您可以实现一个具有单个 type 字段的类TListener,并传递它。但我非常怀疑这是否真的是正确的解决方案。

于 2012-11-28T09:14:13.357 回答