加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Delphi中安全地使用Form来分发与其生命周期相关的接口对象?

发布时间:2020-12-15 04:15:27 所属栏目:大数据 来源:网络整理
导读:我有一个Delphi表单,它提供了一个接口对象背后的功能,代码的其他部分也通过属于Form的属性获得引用.我不能将接口功能委托给子对象,因为窗体上的控件/组件提供了太多的功能.我不能使用TAggregatedObject或TContainedObject来链接传递给接口的对象的生命周期,
我有一个Delphi表单,它提供了一个接口对象背后的功能,代码的其他部分也通过属于Form的属性获得引用.我不能将接口功能委托给子对象,因为窗体上的控件/组件提供了太多的功能.我不能使用TAggregatedObject或TContainedObject来链接传递给接口的对象的生命周期,因为TForm类不继承TinterfacedObject而Delphi不支持多重继承,所以我不能将TInterfacedObject混合到继承链中.如果表单被销毁而某些其他代码保存表单传递的一个接口引用,则此情况可能导致访问冲突.谁能想到这个问题的好方法呢?

解决方法

您可以将接口委托给子对象,只需让该对象包含一个指向Form的内部指针,这样它就可以在需要时访问Form的控件,这与您现在已经在做的没有什么不同.

您可以根据需要使用TAggregateObject或TContainedObject.它们不要求Form从TInterfacedObject派生.他们所需要的只是一个IInterface接口指针,TComponent来自IInterface(并覆盖_AddRef()和_Release()以禁用引用计数),因此您可以将Form本身(作为TComponent后代)作为所需的IInterface指针传递.

这留下了唯一的问题 – 当活动接口引用被其他代码保存时,表单关闭.最简单的解决方案是:1)在Form关闭时重写代码以不保留那些引用,或者2)在这些引用被释放之前不允许Form关闭.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读