gpt4 book ai didi

delphi - 使用接口(interface)强制实现接口(interface)返回类型吗?

转载 作者:行者123 更新时间:2023-12-03 18:08:26 26 4
gpt4 key购买 nike

使用接口(interface)时,实现类方法是强制返回接口(interface),还是有办法返回对象?

一个例子将阐明:

单位EmployeeIntf:

IEmployee = interface(IInterface)
function CoWorker: IEmployee; // We dont know anything about TEmployee here
end;

单位员工:

uses EmployeeIntf;
...

TEmployee = class(TObject, IEmployee)
public
function CoWorker: IEmployee; // Returns an error if set to TEmployee
end;

如果该方法返回一个 TEmployee,则当前代码会因编译器错误而停止:E2211 “CoWorker”声明与 IEmployee 接口(interface)中的声明不同(使用 Delphi 2010)

只要 TEmployee 是 IEmployee,TEmployee.CoWorker 方法是强制返回一个接口(interface),还是有办法返回一个 TEmployee?

如果在这种情况下只允许接口(interface),那么 OO 设计的原因是什么?

[编辑]

  • 正如许多贡献者所问,我不需要对 TEmployee 进行引用计数,并且希望将上述问题与任何引用计数考虑因素分开。

  • 这个问题的背景是需要在外部组件(在单独的包中)中使用一组非常有限的 TEmployee 公共(public)函数。我不能简单地在包中导入“Employee”单元,因为 uses 部分中有太多不需要的依赖项,所以我正在寻找松散耦合的解决方案。

谢谢,

最佳答案

您可以通过引入方法解析子句让编译器满意:

type
TEmployee = class(TInterfacedObject, IEmployee)
function IEmployee.CoWorker = IEmployeeCoWorker;
public
function IEmployeeCoWorker: IEmployee;
function CoWorker: TEmployee;
end;

function TEmployee.IEmployeeCoWorker: IEmployee;
begin
result := CoWorker;
end;

当然,这会使代码复杂化,但如果它确实是您需要的......

关于delphi - 使用接口(interface)强制实现接口(interface)返回类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849070/

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