如何将Procedure of object类型过程赋值给reference to类型过程?
问题解答
根因分析
出现类型不兼容报错的核心原因有两个:
TMyProc是匿名方法类型(reference to procedure),而直接取类实例成员方法得到的是方法指针类型(procedure of object),二者在Delphi中属于完全不同的类型体系,无法直接赋值TAnObject.MyProcImpl存在重载定义,编译器无法自动推导你需要绑定的是接收String参数的那个重载版本
解决方法
通过匿名方法包裹你需要的String参数版本MyProcImpl即可完成适配,代码示例如下:
MyObject.MyProc := procedure(const adata: String) begin // 显式调用接收String参数的重载,自动完成类型适配 AnObject.MyProcImpl(adata); end;
注意:请勿直接对
procedure of object类型做强制类型转换后赋值给匿名方法类型,会导致调用时出现不可预期的内存访问异常,必须通过匿名方法包装的方式做类型适配。
内容的提问来源于stack exchange,提问作者zeus
相关产品推荐
相关产品推荐

