interface和implemention中的uses有什么区别?(50分)

  • 主题发起人 主题发起人 renrf
  • 开始时间 开始时间
R

renrf

Unregistered / Unconfirmed
GUEST, unregistred user!
interface处的uses子句指出了需要访问本单元接口部分的其他单元,包括被引用的其他数据类型定义的定义单元,这些数据类型在其他数据类型定义中会引用,比如组件就使用了窗体的定义。
在implementation处的uses子句指出了需要访问执行代码的单元。
这两句话我看不明白,interface和implemention中的uses有什么区别?
 
把interface中use的单元移两个到implemention中,再运行看看
 
interface里面定义类成员用到其他unit定义的类、类型等就要在interface下uses
只在implemention的代码中用到的东西,可以在interface也可以在implemention中uses
但是,因为放在interface中的uses是不能相互、递归引用的,
比如unit1在interface引用unit2、unit2在interface引用unit1,或者3个以上的unit在interface循环
引用,都是错误的。所以能放下面的最好放下面,不能放的那就没办法。
访下面还可以使引用本unit的其他unit编译的时候处理更少的东西
 
市面是很难找到关于Object Pascal的书,
我是看《delphi开发指南》130多的书。
感觉讲Object Pascal的太简略。各位是怎么学的?
 
简单的说就是作用域不同
interface 引用的单元文件的对象、变量在本单元内都能用,
implementation 下引用的单元文件的对象、变量只能在本单
元implementation后的代码才可用,在interface和implementation之间的代码就不可访问
 
作用范围不同,就好像全军变量,和临时变量么!
 
例子:
unit a1;
//申明了一个变量或对象
type
TTest=Class(TObject)
end;
-------------------
Unit a2;
interface
uses a1;
type
TTest1=Class(TObject)
fa:TTest;//合法使用
end;
implementation
var k:TTeat;//合法
end.
---------------------
Unit a3;
interface
type
TTest2=Class(TObject)
fa:TTest;//不合法
end;
implementation
uses a1;
var k:TTeat;//合法
end.
 
我看你是看得不太认真吧,我在《开发人员指南》里
说过要注意接口部分和实现部分uses的区别
同意 pipi的说法
同时在实现部分用uses可以防止循环引用
例如unit1 在interface 引用了unit2
而unit2 在interface 引用了unit1
就很容易造成循环引用
 
后退
顶部