var
Form1: TForm1;
Y:integer;
implementation{$R *.dfm}
var
X:integer;请教个问题,Y和X声明的位置不同,有什么区别吗?
那个private和public区域的声明好理解,是对外开放,共有还是私有变量的意思。但是上面的两个变量X,Y,位置不同,有什么特别的地方吗?和private区和public区有区别吗?
Form1: TForm1;
Y:integer;
implementation{$R *.dfm}
var
X:integer;请教个问题,Y和X声明的位置不同,有什么区别吗?
那个private和public区域的声明好理解,是对外开放,共有还是私有变量的意思。但是上面的两个变量X,Y,位置不同,有什么特别的地方吗?和private区和public区有区别吗?
解决方案 »
- To 关于Paradox数据表,进行查询时的问题
- Delphi是一种语言还是开发工具? ding
- 本人是初学者,请教大家一个比较菜的问题,希望各位帮助下小弟
- 高手大哥们,小弟问一个简单问题,关于检测系统是否已经安装某软件问题
- OnCalFields计算域事件在什么情况下触发的??急,在线
- 请问我要创建文件、夹删除文件夹、把文件夹改名,用Delphi怎么现实。我找的方法只在win3.1中有用,但我想要在win32中能用的函数
- 如何提高速度,请高手指点!谢谢
- case 語句的問題...worry
- 自制控件时的一个问题!!
- 谁能给我一点Delphi中关于Socket编程的资料
- 关于ADOQuery的onCalcFields计算字段的触发,很奇怪,大家都会碰到的,进来看看
- 急!!delphi调用c++的dll失败,但是pb和vb.net都可以,大家帮我看看
比如当如下定义时:
var
Form1: TForm1;
Y:integer;
implementation{$R *.dfm}
procedure test();
begin
y := 0; //使用正确
x := 100;//这样子编译是会出错的,提示X未定义。
end;
var
X:integer;
而
var
Form1: TForm1;
Y:integer;
implementation{$R *.dfm}
var X:integer;
procedure test();
begin
y := 0; //使用正确
x := 100;//使用正确
end;
Y能在别的单元调用
X不能
X相当于private
主要是作用域名不同,对其它单元来说区别是由谁来调用...在public下是类的实例调用
在Y位置直接使用
在X位置不能被访问
private
public
里面。
例如
TTest = class
private
FVar1: string;
function GetVar1(): string;
public
FVar2: string;
end;引用FVar2需要按照以下的方式,实例化对象,再引用对象成员。注意,FVar2一定是通过对象Test来引用的,不可以在外部直接引用。如果是在TTest内部引用,self可以省略。
var
Test: TTest;
S: string;
begin
Test:= TTest.create;
S:= Test.FVar2;
S:= Test.FVar1; // 这一行出错,私有变量不能被外部引用,只能在内部通过Self来引用,Self可以省略
end;这里有个小技巧,如果你是在TTest声明所在的单元内部,调用TTest的私有成员,形如 S:= Test.FVar1;,是可以编译通过的,只有在TTest声明以外单元中调用私有成员才会出错。2:implementation 指示字,是用来分割 接口声明部分(interface)和实现部分(implementation)。
这里说的接口声明部分interface,和接口interface,虽然关键字相同,但表示的意义不同。我虽然不知当初Anderson 为什么把delphi设计成这样,但是我感到这样设计至少有两个好处,第一,类似于C中的函数前向声明,第二,加快编译速度,由于只需要将Unit中interface部分先预编译了,就使得在使用代码提示时,不必等待很长时间。接口声明interface中声明的所有类型type 变量var 常量 const 都可以被本单元unit和其他单元引用(只需要外部单元在uses中添加单元引用即可)实现部分 implementation
本意是指 声明的 类中函数 以及 静态函数的 函数体实现部分,但,其实implementation起到一个命名空间的隔绝作用,也就是说在implementation部分中声明的类型和变量只可以被本单元unit的函数访问。如果是声明变量
implementationvar
s: string; // s只能从声明的地方起,一直到单元结束end. 之间的函数可以访问如果是声明类型
1:public和private中声明的成员,一定需要通过类来引用
例如
TTest = class
private
FVar1: string;
function GetVar1(): string;
public
FVar2: string;
end;引用FVar2需要按照以下的方式,实例化对象,再引用对象成员。注意,FVar2一定是通过对象Test来引用的,不可以在外部直接引用。如果是在TTest内部引用,self可以省略。
var
Test: TTest;
S: string;
begin
Test:= TTest.create;
S:= Test.FVar2;
S:= Test.FVar1; // 这一行出错,私有变量不能被外部引用,只能在内部通过Self来引用,Self可以省略
end;这里有个小技巧,如果你是在TTest声明所在的单元内部,调用TTest的私有成员,形如 S:= Test.FVar1;,是可以编译通过的,只有在TTest声明以外单元中调用私有成员才会出错。2:implementation 指示字,是用来分割 接口声明部分(interface)和实现部分(implementation)。
这里说的接口声明部分interface,和接口interface,虽然关键字相同,但表示的意义不同。我虽然不知当初Anderson 为什么把delphi设计成这样,但是我感到这样设计至少有两个好处,第一,类似于C中的函数前向声明,第二,加快编译速度,由于只需要将Unit中interface部分先预编译了,就使得在使用代码提示时,不必等待很长时间。接口声明interface中声明的所有类型type 变量var 常量 const 都可以被本单元unit和其他单元引用(只需要外部单元在uses中添加单元引用即可)实现部分 implementation
本意是指 在声明部分interface中声明的 类函数 以及 静态函数 的函数体实现部分,但,其实implementation起到一个命名空间的隔绝作用,也就是说在implementation部分中也可以声明类型type,变量var,常量const,单元引用uses,这些声明的类型和变量只可以被本单元unit的函数访问。特别之处,在implementation中声明的类型type,变量var,常量const不一定要写在紧跟着implementation之后,而是可以写在任何部分,其作用域是从声明的地方起,至单元结束end.止。在implementation中引用列表uses还有一种特殊用途,是用来解决单元间循环引用的问题,例如,如果两个单元需要互相引用对方,如果都写在 interface部分的uses中,就会引起编译器报错:循环引用单元。解决方法是,在一个单元用的引用写在interface的uses中,在另一个单元中的引用写在implementation的uses中。最后再多罗嗦一句,在楼主的示例中 {$R *.dfm} 这个编译指示字表示的是在单元所在目录下搜索和单元同名的dfm文件,找到后将其编译进resource中。
例如
TTest = class
private
FVar1: string;
function GetVar1(): string;
public
FVar2: string;
end;引用FVar2需要按照以下的方式,实例化对象,再引用对象成员。注意,FVar2一定是通过对象Test来引用的,不可以在外部直接引用。如果是在TTest内部引用,self可以省略。
var
Test: TTest;
S: string;
begin
Test:= TTest.create;
S:= Test.FVar2;
S:= Test.FVar1; // 这一行出错,私有变量不能被外部引用,只能在内部通过Self来引用,Self可以省略
end;这里有个小技巧,如果你是在TTest声明所在的单元内部,调用TTest的私有成员,形如 S:= Test.FVar1;,是可以编译通过的,只有在TTest声明以外单元中调用私有成员才会出错。2:implementation 指示字,是用来分割 接口声明部分(interface)和实现部分(implementation)。
这里说的接口声明部分interface,和接口interface,虽然关键字相同,但表示的意义不同。我虽然不知当初Anderson 为什么把delphi设计成这样,但是我感到这样设计至少有两个好处,第一,类似于C中的函数前向声明,第二,加快编译速度,由于只需要将Unit中interface部分先预编译了,就使得在使用代码提示时,不必等待很长时间。接口声明interface中声明的所有类型type 变量var 常量 const 都可以被本单元unit和其他单元引用(只需要外部单元在uses中添加单元引用即可),接口声明部分不能实现函数。实现部分 implementation
本意是指 在声明部分interface中声明的 类函数 以及 静态函数 的函数体实现部分,但,其实implementation起到一个命名空间的隔绝作用,也就是说在implementation部分中也可以声明类型type,变量var,常量const,单元引用uses,这些声明的类型和变量只可以被本单元unit的函数访问。特别指处,在implementation中声明的类型type,变量var,常量const不一定要写在紧跟着implementation之后,而是可以写在任何部分,其作用域是从声明的地方起,至单元结束end.止。在implementation中引用列表uses还有一种特殊用途,是用来解决单元间循环引用的问题,例如,如果两个单元需要互相引用对方,如果都写在 interface部分的uses中,就会引起编译器报错:循环引用单元。解决方法是,在一个单元用的引用写在interface的uses中,在另一个单元中的引用写在implementation的uses中。最后再多罗嗦一句,在楼主的示例中 {$R *.dfm} 这个编译指示字表示的是在单元所在目录下搜索和单元同名的dfm文件,找到后将其编译进resource中。