请问public和var下面的声明有是么不同?(5分)

  • 主题发起人 主题发起人 terry_zhou82
  • 开始时间 开始时间
T

terry_zhou82

Unregistered / Unconfirmed
GUEST, unregistred user!
同上,好像都是全局变量吧?怎么区分啊?
 
public 下声明的是所有单元可见的变量
但不是全局变量
var后的声明的是变量,一般在函数里使用
const后声明的是常量
 
>>public 下声明的是所有单元可见的变量
不对吧?
 
public 是用来声明对象的公开的过程、函数、属性,对于任何引用了此对象单元的单元内,都可以使用public声明的,对象的过程、函数、属性。
var是用来声明变量的,如果是在单元的接口部分声明的变量,可以通过引用此单元文件来访问此变量。
 
public下声明的变量,属性,方法,是类的属性和方法,不光本单元可见,在引用了本单元的其他单元中,也可以引用,此种引用是以类的实例的方式来引用的;
var下声明的变量,在本单元有效,在引用了本单元的其他单元中,也可以直接引用,此种引用与本单元的类无关,可以用 单元名.变量名 的格式引用,也可直接呼叫 变量名 。
 
楼上的,可否举个例子来说明啊?
 
比如有一个单元如下:
unit Unit_InputDlg;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Unit_Base, ExtCtrls, StdCtrls, Buttons, RzPanel;

type
TFrm_InputDlg = class(TForm)
RzPanel1: TRzPanel;
HintLabel: TLabel;
Edit_Input: TEdit;
RzPanel2: TRzPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormCloseQuery(Sender: TObject
var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
aaa : integer
procedure MyProc;
end;

var
Frm_InputDlg: TFrm_InputDlg;
bbb : integer;
procedure ProcAnother;

implementation
{$R *.dfm}
procedure ProcAnother;
begin
//do something
end;

procedure TFrm_InputDlg.FormCloseQuery(Sender: TObject;var CanClose: Boolean);
begin
if self.ModalResult = mrOK then
begin
if trim(Edit_Input.Text) = '' then
begin
CanClose := False;
Edit_Input.SetFocus;
end;
end;
end;

procedure TFrm_InputDlg.MyProc;
begin
//do something...
end;

end.
那么,public下的变量aaa,必须在该类TFrm_InputDlg已经创建后才可以在别的单元引用,引用方法是:Frm_InputDlg.aaa
public下的方法可以在没有创建该类的情况下引用(方法定义完成后,其方法表中的地址已经确定了,即使类实例没有创建,方法的指针仍然可以找得到),引用方法是:Frm_InputDlg.MyProc;
var 下的变量bbb,则可以以Unit_InputDlg.bbb;的形式调用;var下的过程和函数也可以以Unit_InputDlg.ProcAnother;的形式调用.这时不管该单元所定义的类有没有创建实例,作为单元应用在别的单元中调用都是可以的.
 
后退
顶部