读书人

uses放在interface后面或放在implemen

发布时间: 2012-02-26 20:19:45 作者: rapoo

uses放在interface后面或放在implementation后面,有什么区别吗?
按教程上的方法做一个最简单的Com服务器程序,发现自动生成程序如下:
interface

uses
ComObj, ActiveX, AutoSrv_TLB, StdVcl, Unit1;

type
TMyAutoSrv = class(TAutoObject, IMyAutoSrv)
protected
function Get_Caption: WideString; safecall;
procedure Set_Caption(const Value: WideString); safecall;
procedure SetColor(AColor: OLE_COLOR); safecall;
procedure SetEditText(const AText: WideString); safecall;

end;

implementation

uses ComServ;

奇怪的是uses ComServ;被放在了Implementation部分,而ComServ.pas和Windows.pas一样,都是Delphi自带的文件。

这个有什么原因在里面吗?



[解决办法]
就使用来看 我觉得区别不大
放在一起,一样可以编译.

具体原因说不上来.
看楼下的
[解决办法]
implementation
uses ComServ; //相当是局部的声明

估计有“循环引用”的问题,所以没有放在头部声明。


[解决办法]
至少有两个区别:
1.如果你在定义域用到了你要use的单元,那么就要放在上面,不然编译不了。
2.放在下面,编译的时候不会去编译你use的单元中use的单元,放在上面则在编译use的单元时,会编译你use的单元中use的单元。所以放在下面不会造成循环引用的问题。
[解决办法]
接口是暴露给调用者的;
实现是供自己引用的;
当然有区别了。

读书人网 >.NET

热点推荐