定义类,循环引用错误,该如何处理?
现有2个单元,分别有部门类、员工类。 期望定义如下:
部门:
unit unDep;
interface
uses unEmp;
type
TDep = class(TObject)
public
depID: string; //部门ID
depName: string; //部门名
depEmpCount: Integer; //部门员工数
depEmpList: array of TEmp; //部门员工列表 -----------------
depParentDepID: string; //父部门ID (若无父部门则为空)
ParentDep: TDep; //上级部门对象 ====
constructor Create();
destructor Destroy; override;
end;
implementation
uses unFrmMain;
员工:
unit unEmp;
interface
uses unDep;
type
TEmp = class(TObject)
public
empID: string; //用户ID号
empName: string; //用户姓名
ParentDep: TObject; //部门对象 ===
constructor Create;
destructor Destroy; override;
end;
implementation
uses unFrmMain;
因为在interface中都分别uses对方,会造成循环也能用错误。
那么这种需求该如何定义呢?
interface uses 循环引用 类定义
[解决办法]
放在implementation下面的uses
[解决办法]
不行放在一元面 哈哈 就解了
[解决办法]
在implementation下声明个局部全局变量
var
FFDep:TDep;
在类的构造函数里转
FFDep:=TDep(XXX);
这样类就可以在不同的单元了
[解决办法]
两种方法:
1. 放在同一个unit中
2. 分别把引用的单元放在interface部分和implementation不同的部分,要错开。
问题:
1.类的职责不清
2.如果只是数据,没有其他作用,这两个类不定义也可,意义不大,而且增加了代码的复杂度。
细节:
既然定义了部门对象,为什么还要放TObject类型的变量?
如下所示:
ParentDep: TObject; //部门对象 ===
结论:
想法也许是好的,做法有点混乱。
[解决办法]
+1