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的单元。所以放在下面不会造成循环引用的问题。
[解决办法]
接口是暴露给调用者的;
实现是供自己引用的;
当然有区别了。