两个单元互相uses(100分)

  • 主题发起人 主题发起人 ljhuacn
  • 开始时间 开始时间
L

ljhuacn

Unregistered / Unconfirmed
GUEST, unregistred user!
Unit1中要Uses Unit2;
Unit2中要Uses Unit1;
编译提示[Fatal Error] UsersForm.pas(8): Circular unit reference to 'Unit1'
有谁知道吗?没有分数的只是提出问题?
 
为什么要互相 uses ? 把一些公用的东西 发到 单独的 unit中啊
 
在implement中互相uses
unit1
...
implement
uses unit2

unit2
...
implement
uses unit1


 
你可以在unit1中把, unit2加在系统的pas后面就可以了
 
第二个引用应该放在Unit2的
implementation后面
 
放到实现部分相互引用。如果有相同的例程需要使用单元域来访问。建议把公共的部分
放到另一个单元。
 
unit1
uses ......,unit2;
...
implement


unit2
...
implement
uses unit1
 
循环引用容易出错。

正确写法如楼上的。
 
试试ALT+F11
引用单的功能
 
一个放在 interface 的 uses 中
另一个放在 implementation 的 uses 中。
 
Unit1 Uses Unit2时,放在单元接口的interface部分,表明全局引用;
Unit2 Uses Unit1时,放在单元实现的implementation部分,表明局部引用。
 
怎么就没有一个人说全放在implementation部分,那我说。其实只要能在implementation部分
uses的,最好都在这里来uses.个人观点。
 
噢 ,错了,原来jinmen也说的是在implementation部分,不好意思,才看到!
 
我要写两个类但是这两个类是不同,比如:
unit1
interface
Uses
Unit2;
TUser = class
public
procedure AddNote(ChildNote : TNote);

unit2
interface
uses
Unti1;
TNote = class
public
function GetParent : TUser;

所以必须要互相引用.好像不能在implementation后
 
不太同意989753的觀點。
在實現部分放的uses隻是局部引用,如果有些變量需要定義為其他單元聲明的特殊類型,
需要使用全局引用,建議此時將共用部分轉移到單獨的unit,再進行引用。個人在使用時
引用系統單元例如windows,Dialogs等全部放在全局引用,自己寫的單元則根據需要,隻有
在必須的情況下才使用全局引用。互相討論交流一下利弊,大家可以相互提高,謝謝
 
相互引用是不可避免的,也是Delphi中的一个很普通的现象,
看了VCL的部分源码就可以知道,

单元引用可以放在接口(interface)部分,也可以放在实现(implement)部分
当然,也是有区别的,接口部分的引用不允许循环互相引用,
但实现部分却没有此限制,
也就是说,你不可能做到,一个单元既包含另一个单元的类的子类,也包含它的父类,
这是不允许的,这会引起设计模式的混乱,它比goto 语句的坏处更甚,
所以,goto语句被保留了(特定的情况下会更方便),但接口部分单元的互相引用
却是无论如何也不能保留的,这也体现了类库的层次性,如果你的确需要在接口部分
互相引用,这就说明你的设计方法存在问题,当然也是不可能实现的

至于单元引用放在哪一部分合适,我同意QQ989753 的观点
怎么就没有一个人说全放在implementation部分,那我说。
其实只要能在implementation部分
uses的,最好都在这里来uses.个人观点。
 
如果两个类的关系密切,请放在同一个单元
 
同意楼上的观点.
我曾经也提过类似的问题,后来我就是在implementation部分
里互相引用,没有什么问题.
 
implementation部分里面引用不会有什么问题,但是在某些时候,
必须在interface部分引用,例如
unit unit1;
interface
uses
unit2;
type TClassName=Class(TObject)
private
Faa:Ttype1;
end;
其中Ttype1是在Unit2中定义的特殊类型。这样情况下只能把unit2放在interface部分
引用而不能放在implementation部分。
当然要避免unit2在implementation部分引用unit1,如果必须引用,则新增一个单元,
将公共部分在新单元中声明,然后在两个unit里面分别引用就可以了


 
同意LiChaohui的意见
 

Similar threads

D
回复
0
查看
871
DelphiTeacher的专栏
D
D
回复
0
查看
930
DelphiTeacher的专栏
D
D
回复
0
查看
945
DelphiTeacher的专栏
D
D
回复
0
查看
777
DelphiTeacher的专栏
D
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部