delphi單元的變數和函式訪問許可權問題

2021-08-25 09:39:10 字數 3938 閱讀 1231

很多初學者對delphi單元的變數和函式訪問許可權不理解,在此我舉例說明,希望初學者看此文後能茅塞頓開。

delphi單元的變數和函式訪問許可權問題如下兩個單元描述:

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, stdctrls;

type

//******************************=物件及其成員區域******************************=

tform1 = class(tform)

button1: tbutton;

procedure formcreate(sender: tobject);

procedure button1click(sender: tobject);

private

str1:string; //在此區域定義的私有變數和私有函式只能在本單元unit1使用

public

str2:string; //在此區域定義的公有變數可以在其它單元使用,但必須先引用此單元 uses unit1; 然後使用unit1.form1.str2; 成員變數str2是物件form1的成員,必須通過物件form1才能得到成員str2

function public1(a:string):string ; //在此區域定義的公有函式可以在其它單元使用,但必須先引用此單元 uses unit1; 然後使用unit1.form1.pub1(2); 成員函式pub1是物件form1的成員,必須通過物件form1才能得到成員函式pub1

end;

//******************************=物件及其成員區域******************************=

//***********************************==全域性區域******************************===

//在此區域定義的變數和函式是全域性的,對其它單元都是可見的,只要該單元uses unit1 則可可以直接引用該區域的變數和函式

// 全域性變數最好統一寫到乙個檔案裡面。

tchar3 = array[0..2] of char;

tstring3 = array[0..2] of string;

function all(str:string):string; //全域性函式,不屬於某個物件

varform1: tform1;

chr:tchar3; //全域性變數,不屬於某個物件

str3:tstring3;

//***********************************==全域性區域******************************===

implementation

uses unit2;

//***********************************=區域性區域******************************====

//在此區域定義的變數和函式是區域性的,只能在本單元unit1使用,對其它單元是不可見的

varstr4:string;

function local1(a:string):string ;

begin

result := a;

end;

//***********************************=區域性區域******************************====

function tform1.public1(a:string):string ;

begin

result := a;

end;

function all(str:string):string;

procedure localfunction; //此處定義的區域性函式dudu只能在function all(str:string):string;使用

begin

showmessage('函式內部使用');

end;

begin

result:=str;

localfunction;

end;

procedure tform1.formcreate(sender: tobject);

begin

str1:='1112';

str2:='3333';

str4:='4433';

end;

procedure tform1.button1click(sender: tobject);

begin

form2.showmodal;

end;

end.

unit unit2;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, stdctrls ;

type

tform2 = class(tform)

button1: tbutton;

procedure button1click(sender: tobject);

private

public

end;

varform2: tform2;

implementation

uses unit1;

procedure tform2.button1click(sender: tobject);

begin

chr[0]:='c';

showmessage('全域性變數'+chr[0]);

str3[0]:='全域性變數';

showmessage(str3[0]);

showmessage('公共變數'+unit1.form1.str2);

showmessage(unit1.form1.public1('公共函式'));

showmessage(all('全域性函式'));

//showmessage('私有變數'+unit1.form1.str4); //不可以引用

//showmessage('區域性函式'+unit1.form1.local1('dd')); //不可以引用

end;

end.

unit檔案結構例項:

unit unt1;

inte***ce

uses windows, messages, sysutils;

type

tfrm1 = class(tform)

private

public

end;

varimplementation

uses untpublic;

end;

作用域:

1.在code3處宣告的全域性變數可以被unt1及其所屬工程(project1)的其他unit檔案訪問(只要其他unit宣告了uses unt1)

2.在code2處宣告的全域性變數和code3處的變數作用域相同

3.在code1處宣告的全域性變數只能被unt1內部訪問即使其他unit檔案宣告了uses unt1

4.在code4處宣告的區域性變數只能在所屬的函式或方法內訪問

生命週期:

1.code3處宣告的全域性變數在unt1結束時(區別於tfrm1結束時)銷毀,這種情況大多發生在所屬工程(project1)結束時

2.code1和code2處的全域性變數在tfrm1結束(比如tfrm1.free)時銷毀

4.code4處的區域性變數在所屬的方法或函式呼叫結束時銷毀

另外例項中兩處uses語句宣告的地方,實際效果是一樣的,沒有什麼差別吧。

以上是個人理解,有錯誤或不全之處還望大家指出更正之。

Delphi常用系統函式 System單元

1.轉換函式 transfer routines unit system chr 傳回ascii 碼所對應的字元。function chr x byte char 例如 hex 十六進製制 chr 02 代表 正文開始 chr 03 代表正文結束 chr 20 代表空格 round 四捨六入五留雙 ...

Delphi函式和過程

過程無返回值,函式有返回值。procedure myproc m,n integer o string p single 2.5 q string delphi 如上例所示,過程宣告和定義中,多個引數是用分號隔開的,但在呼叫時是用逗號隔開的 eg myproc 3,4,me 3.14 上例中省略了最...

系統環境變數的設定Delphi函式

uses tregistry function setglobalenvironment const name,value string const user boolean true boolean resourcestring reg machine location system curren...