天天看點

在public中和在implementation前面定義的全局變量的差別

前言

在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上面引用的才是真正的全局變量,在其他單元中引用,直接調用就可以,不用加單元名稱。

繼續閱讀