unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
int_a:int;//***1
{ Public declarations }
end;var
Form1: TForm1;
int_b:int;//***2implementation{$R *.DFM}
var
int_c:int;//***3procedure TForm1.Button1Click(Sender: TObject);
begin
//do something
end;end.
全局变量大家一定用的很多,但是它却可以在多个地方进行定义(或许有一个或者几个地方定义是错误的),我以上面的一个最基本的unit为例子,在打星号的1,2,3三个地方我都可以定义全局变量。我认为,三者是有区别的,区别在于,1,2两个地方定义的,其他unit可以用到,而3定义的只有在本unit中使用。到底1,2有何区别?或者还有什么其他的区别?还望大家一起讨论!
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
int_a:int;//***1
{ Public declarations }
end;var
Form1: TForm1;
int_b:int;//***2implementation{$R *.DFM}
var
int_c:int;//***3procedure TForm1.Button1Click(Sender: TObject);
begin
//do something
end;end.
全局变量大家一定用的很多,但是它却可以在多个地方进行定义(或许有一个或者几个地方定义是错误的),我以上面的一个最基本的unit为例子,在打星号的1,2,3三个地方我都可以定义全局变量。我认为,三者是有区别的,区别在于,1,2两个地方定义的,其他unit可以用到,而3定义的只有在本unit中使用。到底1,2有何区别?或者还有什么其他的区别?还望大家一起讨论!
解决方案 »
- 大家好一个菜鸟问题!!还请路过的朋友指点
- WebBrowser(小问题送分)
- 图片合片特效,请各位大侠指点,万分感谢
- 一个窗体类继承的重要问题
- 请教!在DELPHI中如何跳过异常继续运行程序?????
- 请问Delphi 8中还保留websnap吗?
- 在窑洞下载的fastreport2.5打印不了了,我该怎么办?急待援救!
- 用户登录问题。
- 为什么在程序运行SQL中的存储过程,会出现未能找到存储过程...,可是我在SQL中有这个存储过程阿!
- 把ip地址放进byte里 该如何写GWIP: array[0..4] of byte;
- (无分帖)函数变量问题:是传递地址还是传递数值?
- 查找到的字符串如何明显表示出来?
位置2处定义:是本单元的变量,所以本单元内所有的类或者其他单元(当然要引用本单元)都可以直接引用。
以上为本人愚见,请不吝赐教!
基礎知識,學習
当一个块封装了另一个块时,前者叫做外部块,后者叫做内部块。如果声明在外部块中的标识符又在内部块中重新声明(同名),那么在整个内部块中,内部块声明的标识符将忽略外部块中的声明(也就是说,编译器在整个内部块中都将该标识符作为内部块的声明解释和使用)。例如,如果在单元的接口节声明了变量MaxValue,然后在单元中的某个函数中声明了同名变量,并且在函数块中引用时没有冠以任何限定词,那么函数块中对MaxValue的引用将解释为局部变量,即函数中的声明。同样,函数中如果创建了另一个函数,在外部作用域中使用的标识符,在内部域中也可以重新声明同名的局部变量(见当前主题编者注中的过程和函数的嵌套定义)。多重单元引用使作用域的定义变得更为复杂。列在uses子句中的每个单元都强制增加了一个新的作用域,该作用域封装了被使用的其他单元、程序以及包含在该单元uses子句中的单元。uses子句中的第一个单元表示了最外层的作用域,紧接其后的单元表示了在该作用域内的新的作用域。如果在两个或更多单元的接口节中声明了相同标识符,那么当引用该标识符而没有冠以限定词时,将选择最内层作用域中的声明,也就是说,选择引用该标识符的单元,或者,如果该引用该标识符的单元中没有对其声明,那么将选择在单元uses子句的单元列表中最后一个声明了该标识符的单元。(见当前主题编者注中的接口节中uses子句对作用域的影响和接口节和实现节中uses子句对作用域的影响)Borland提供的System单元自动被每个程序或单元使用。System单元中的所有声明和编译器能自动识别的预定义类型、例程、常量等一起,总是作为最外层的作用域。(见当前主题编者注中的唯一特殊的System单元)可以通过使用冠以限定词的标识符(见限制标识符)或with语句(见With语句)来超越上述作用域规则从而绕过内层作用域的声明。