前言
在delphi进行编码时,工程中经常需要用到全局变量,所以正确的使用全局变量将尤为重要。本文主要介绍在public中和在implementation前面定义的全局变量的区别。
一、单元文件定义的全局变量
先附上一个单元文件,代码中给出个变量所处的位置。
单元名称为uni1.pas
TForm1=Class(TForm)
Edit1 : TEdit;
Label1 : TLabel;
Button1 : TButton;
Button2 : TButton;
Button3 : Tbutton;
procedure Button1Click(Sender : TObject);
procedure Button2Click(Sender : TObject);
procedure Button3Click(Sender : TObject);
private
{Private declarations}
Name : String='Deen'; //成员变量;
public
{Public declarations}
end;
Var
Form1 : TForm;
Name : String;//全局变量。
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender : TObject);
var
Name : String; //局部变量;
begin
Name := '局部变量';
Edit1.Text := Name;
end;
end.
二、各变量的定义、作用范围及使用
全局变量:是指在类外声明的变量,通常这种变量时在整个工程内有效的,也就是说在整个工程中的类都可以使用。该变量的生存周期是在工程创建时有效,工程销毁时销毁。
在其他单元文件中可直接使用,不需加被引用单元的窗体名。
比如我在一个窗体中,声明了一个全局变量,如下:
var
W_POS_BankForm: TW_POS_BankForm;
Test:string='dancy'; //测试全局变量
那么我就可以直接在另一个窗体中使用,如下:
ShowMessage(Test);
注:Test前面可以加文件名(注意不是窗体名),如unit.Test.
成员变量:是指在类中声明的变量,这种变量在类中的方法都可以使用。其生命周期是在类创建时有效,类销毁时销毁。
在其他单元文件中使用时,需要加被引用单元的窗体名。
Form1.name;
name前面加的是窗体名.局部变量:是指在方法内部声明的变量,这种变量只能在方法内部使用。其生命周期也是在方法内部有效,当方法调用结束后,其内部所声明的变量也随之销毁。
只在本单元中使用。
三、在public中和在implementation前面定义的全局变量的区别
不管是使用成员变量还是全局变量,都需把它们先use到使用的单元文件中。
在public中定义的是类成员,在implementation上面定义的才是全局变量 Public中的定义的,在其他单元(Unit)引用要加该单元的名称。 而在implementation上面引用的才是真正的全局变量,在其他单元中引用,直接调用就可以,不用加单元名称。