gpt4 book ai didi

delphi - Delphi 和 Lazarus (FPC) 中接口(interface)的实现有什么区别?

转载 作者:行者123 更新时间:2023-12-03 14:51:53 25 4
gpt4 key购买 nike

我们有一个充满自定义组件的项目,目前正在 Lazarus 和 Delphi 中运行。

我正在思考它的代码接口(interface),但我对它们不太熟悉。我想知道的是:Delphi 和 Lazarus 接口(interface)的实现细微差别是什么?有什么需要特别注意的吗?我必须编写完全不同的代码吗?

背景说明:我认为组件可以从接口(interface)中受益,或者至少,我会从中学到更多。例如,其中一个组件使用串行端口与许多不同的硬件进行通信。但用户应该只使用我们的组件来创建应用程序。因此,我们拥有来自基类的每个硬件的组件和一个类。在运行时,我们在组件内创建特定的类。

不确定是否需要最后的解释,但如果你们中有人需要的话,我可以写更多内容。

最佳答案

在 Free Pascal 中,接口(interface)类型取决于模式。基本上有模式COM or CORBA 。 COM是默认的,与Delphi大致兼容。 CORBA 是一个更简单的情况,没有引用计数。 (因此也不会生成对引用计数函数的调用)。因此基本上 FPC Corba 接口(interface)就像 IUnknown 接口(interface)的假设祖先。

除此之外,接口(interface)发布时有时会存在一些差异。 Delphi 倾向于在过程或 block 结束时(在较大的过程中)减少引用计数,而 FPC 有时会更快地释放它们,通常是在最后一次使用的语句之后立即释放它们。顺便说一句,两者都是合法的实现选择,具体取决于临时变量的作用域。 (仅在函数级别,或者也在更深的嵌套 block 中)

然而,这有时会揭示代码中隐藏的(坏的)假设,特别是当在一个过程中使用接口(interface)引用和对象引用时,这些过程可能在 Delphi 中“生存”,但在 FPC 中却不行。这是一个典型的案例,说明长时间工作的代码不一定是正确的。人们可能只会在更改实现时注意到隐藏的假设

(稍后添加:)请注意,您可以在 *nix 上使用 COM 样式。它主要是插入对引用计数例程的调用,从而将两种接口(interface)类型分开。不是这些调用被路由到哪个系统(COM、Corba 或简单的 RTL 引用计数)。

请注意,我认为这两种接口(interface)类型的 COM 与 Corba 名称都选择得很糟糕。 Corba 接口(interface)实际上会进行引用计数,但传统上这种引用计数是手动处理的,因为 Java 不支持以自动化方式外部处理接口(interface)。

添加于2021-11-06:看来Delphi Alexandria now follows suit

关于delphi - Delphi 和 Lazarus (FPC) 中接口(interface)的实现有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com