delphi单元的变量和函数访问权限问题

很多初学者对delphi单元的变量和函数访问权限不理解,在此我举例说明,希望初学者看此文后能茅塞顿开。

delphi单元的变量和函数访问权限问题如下两个单元描述:

unit Unit1;

interface

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
{ Private declarations }
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
{ Public declarations }
end;
//===============================对象及其成员区域===============================

//=====================================全局区域=================================
//在此区域定义的变量和函数是全局的,对其它单元都是可见的,只要该单元uses unit1 则可可以直接引用该区域的变量和函数

// 全局变量最好统一写到一个文件里面。

TChar3 = array[0..2] of Char;
TString3 = array[0..2] of String;
function all(str:String):string; //全局函数,不属于某个对象
var
Form1: TForm1;
chr:TChar3; //全局变量,不属于某个对象
str3:TString3;
//=====================================全局区域=================================
implementation

uses Unit2;

{$R *.dfm}
//====================================局部区域==================================
//在此区域定义的变量和函数是局部的,只能在本单元Unit1使用,对其它单元是不可见的
var
str4: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;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ;

type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation
uses Unit1;

{$R *.dfm}

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;
interface
uses Windows, Messages, SysUtils;
type
Tfrm1 = class(TForm)
private
{code1}
public
{code2}
end;
var
{code3}
implementation
uses untpublic;
{code4}
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语句声明的地方,实际效果是一样的,没有什么差别吧。

以上是个人理解,有错误或不全之处还望大家指出更正之。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值