【发布时间】:2011-10-21 12:00:23
【问题描述】:
使用接口时,实现类方法是强制返回接口,还是有办法返回对象?
举个例子来说明:
在单位 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 中的声明不同(使用 Delphi 2010)
TEmployee.CoWorker 方法是强制返回一个接口,还是有办法返回一个 TEmployee,只要 TEmployee 是一个 IEmployee?
如果在这种情况下只允许接口,那么 OO 设计的原因是什么?
[编辑]
正如许多贡献者所问的,我不需要对 TEmployee 进行 ref 计数,并且希望将上述问题与任何 ref 计数考虑隔离开来。
这个问题的背景是需要在外部组件中(在单独的包中)使用 TEmployee 的一组非常有限的公共函数。由于uses部分中有太多不需要的依赖项,我不能简单地在包中导入'Employee'单元,所以我正在寻找一个松散耦合的解决方案。
谢谢,
【问题讨论】:
-
从您的 cmets 到一些答案来看,您应该更新问题以提供这些 cmets 中给出的额外信息。
-
大卫,谢谢你的建议,完成了。