gpt4 book ai didi

delphi - 在delphi中分离接口(interface)和实现类?

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

我将我的 Delphi 代码分成接口(interface)和实现单元。

EmployeeIntf.pas 看起来像这样

type
// forward declaration
TScheduleList = class;
TDeparment = class;
TEmployee = class(BDObject)
....
function GetSchedules: TScheduleList;
function GetDepartment: TDepartment;
end;

TEmployeeList = class(DBList)
....
end;

TEmployeeDM = class(BDDBobject)
...
end;

然后我有两个单元 ScheduleIntf.pasDepartmentIntf.pas,它们声明了 TScheduleList 类和 TDepartment 类。

然后在我的主要单元中,它结合了所有单元,看起来像这样,

Unit BusinessDomain
Interface
uses
classes
{$I Interface\EmployeeIntf.pas}
{$I Interface\DepartmentIntf.pas}
{$I Interface\ScheduleIntf.pas}
Implementation
uses
SysUtils
{$I Implementation\EmployeeImpl.pas}
{$I Implementation\DepartmentImpl.pas}
{$I Implementation\ScheduleImpl.pas}
Initialization
finalization

end.

当我编译这个时,编译器抛出一个错误;

*Type TScheduleList is not yet completely defined*

我如何让这些类在每个单元文件 (.pas) 中分开,然后在编译器不抛出此错误的情况下进行前向声明?

类本身很大,我更愿意以这种方式将它们分开。

加思

最佳答案

我的第一个建议:完全跳过这个 $Include 东西。正如 Uwe 所写,找到一个更像 Delphi 的解决方案。

如果您真的想要保持 $Include 风格:您引用的错误发生是因为前向声明不能跨“类型” block 工作。您在一个 block 中转发声明 TScheduleList,但在另一个 block 中定义它。要解决此问题,请省略 *Intf.pas 中的“type”关键字并将其插入 BusinessDomain.pas 中的包含之前。

关于delphi - 在delphi中分离接口(interface)和实现类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011006/

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