首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

定义类,循环引用异常,该如何避免

2013-04-09 
定义类,循环引用错误,该如何处理?现有2个单元,分别有部门类、员工类。 期望定义如下:部门:unit unDepinterf

定义类,循环引用错误,该如何处理?
现有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
[解决办法]
不行兩個類放在一個單元裡面 哈哈 問題就解決了
[解决办法]
引用:
楼上的,放在一个单元里,也有前后的问题。前面的类不能有后面类类型的成员。

当然如我代码中用 TObject 类型也可以,但使用起来非得用个 TDep(XXX).XX 感觉很麻烦。


在implementation下声明个局部全局变量
var
  FFDep:TDep;

在类的构造函数里转
FFDep:=TDep(XXX);

这样类就可以在不同的单元了


[解决办法]
两种方法:
1. 放在同一个unit中
2. 分别把引用的单元放在interface部分和implementation不同的部分,要错开。

问题:
1.类的职责不清
2.如果只是数据,没有其他作用,这两个类不定义也可,意义不大,而且增加了代码的复杂度。

细节:
既然定义了部门对象,为什么还要放TObject类型的变量?
如下所示:
ParentDep: TObject; //部门对象    ===

结论:
想法也许是好的,做法有点混乱。
[解决办法]
引用:
不行兩個類放在一個單元裡面 哈哈 問題就解決了


+1

热点排行