uses 关键字的位置对程序有什么影响(100分)

  • 主题发起人 主题发起人 stevenldj
  • 开始时间 开始时间
S

stevenldj

Unregistered / Unconfirmed
GUEST, unregistred user!
uses 关键字的位置对程序有什么影响

uses 关键字放置在 interface 部分和放置在 implementation 部分有什么不同?对程序或单元文件有什么影响?我自己建立了一个 Unit, 里面需要用到 Windows, SysUtils, Classes, Registry,我该把他们放在什么部分 uses 好呢?
 
当然放在interface部分啊!
在interface部分引用的单元不可以循环引用,而在implementation 部分的可以循环引用,
一般公用单元什么都是在interface部分引用的!
 
我的理解:
interface部分的uses 对于你在申明部分有用,如果,放在实现部分的uses单元,那么,你在定义方法参数或者类成员的时候, 就不能引用实现部分包含单元的类型..其他区别我不知道了.
 
在A单元中放在interface部分的引用,在B单元引用A单元时,同时可以使用A单元interface部分中其它单元的数据。
一般把系统单元放在interface部分,把自定义单元放在implemetation部分。
 
在interface部分引用的单元不可以循环引用,而在implementation 部分的可以循环引用,
一般公用单元什么都是在interface部分引用的!??
这种解释比较有点新意啊,!
 
unit a;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

end.

================================================================

unit b;

interface
uses a;

implementation

begin
MessageBox(Applicationn.Handle, 'a', 'b', MB_OK);
end;

end.

=========================================================================

以上代码调试不通,提示[Pascal Error] b.pas(9): E2003 Undeclared identifier: 'MessageBox'

liuchong 的解释:
{在A单元中放在interface部分的引用,在B单元引用A单元时,同时可以使用A单元interface部分中其它单元的数据。
一般把系统单元放在interface部分,把自定义单元放在implemetation部分。}
好像不对哦。

icelovey 的解释是对的
{在interface部分引用的单元不可以循环引用,而在implementation 部分的可以循环引用,
一般公用单元什么都是在interface部分引用的! }
在 implementation 部分,可以同时 a uses b 和 b uses a,而在 interface 部分却不行。

duhai_lee 的解释就是引用的先后次序,当然要在使用之前引用了。

我在 interface 不需要引用任何单元文件,只做函数的声明,而在 implementation 部分需要用到其他单元的文件,那可以不可以把所有 uses 都放在 implementation 部分呢。

implementation 部分的 uses 只是为了实现循环引用而已吗?
 
这个问题还没解决呢,我不知道 USES 放在 接口部分 和放在 实现部分 有什么不同,难道在实现部分使用 USES 只是为了使单元间可以相互引用吗?
还有 liuchong 的解释,我在其他地方也看到过相似的说明,是不是我的理解有误呢?
 
结贴。

在interface部分引用的单元不可以循环引用,而在implementation 部分的可以循环引用,
一般公用单元什么都是在interface部分引用的!

暂且这么理解吧。
 
后退
顶部