关于变量的作用域(20分)

  • 主题发起人 主题发起人 kenmen
  • 开始时间 开始时间
K

kenmen

Unregistered / Unconfirmed
GUEST, unregistred user!
"unit ProcForm;

interface

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

type
{procedure type definition}
IntProc = procedure (var Num: Integer);

TForm1 = class(TForm)
ApplyButton: TButton;
DoubleRadioButton: TRadioButton
...................... "
请问在TYPE里定义的变量的作用域是怎的?
和在INTERFACE里定义的全局变量,在IMPLEMENTATION里定义的全局隐含
变量有啥不同?还有,全局变量与在PRIVATE里定义的变量有啥不同?
请高手指点!!
 
>>请问在TYPE里定义的变量的作用域是怎的?
此Unit的全局以及uses 这个Unit的其他单元的全局

>>和在INTERFACE里定义的全局变量,在IMPLEMENTATION里定义的全局隐含
>>变量有啥不同
Implemention中定义的全局变量只能在当前Unit中使用

>>全局变量与在PRIVATE里定义的变量有啥不同
这个不同点就多了,照道理是不太好放一块儿比较的,Private中定义的变量
仅限于此类的对象实例及其成员函数访问,哪怕是它的派生类都无权调用的。
 
补充一点:
>>Private中定义的变量仅限于此类的对象实例及其成员函数访问,
>>哪怕是它的派生类都无权调用的。
这句话有点问题。在C++中是这样,但在Delphi中不对。
请注意看看有Delphi的帮助,Private中定义的变量在定义它的单元内的子类中也有效,
这是Delphi中不十分严谨的地方。
 
另外:
>>请问在TYPE里定义的变量的作用域是怎的?
在TYPE里定义的“变量”,它只是类中的成员,如ApplyButton、DoubleRadioButton,
或是一种变量类型,如IntProc或TForm1。
因此它们不能直接使用,必须先定义对应的变量才能使用。
比如,在创建第一个窗体时,Delphi会自动在Interface段内加上以下两句变量申明。
Var
Form1: TForm1;
 
类型 应在全局有效(须引用该单元)。
 
我还想问问:
我在TYPE与PRIVATE之间这样定义变量:
TForm1 = class(TForm)
'i:integer;'
GroupBox1: TGroupBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
.....................
若我这样声明,会弹出一条信息:
"field form1.i does not have a corresponding component."
只有在private里声明才可。
但若这样声明:
"var i:integer;"
则不论是在第一还是第二种声明方式里,都会弹出这样的窗口
"expected end but var fount"
请问为啥?
 
为啥大家不说话了?
 
TYPE里定义的是变量的类型吧,不是变量
PRIVATE里定义的是本类的私有成员变量,只能被本类使用
IMPLEMENTATION里定义得是本单元的变量,可以被本单元的任何过程和函数调用(包括类方法)
 
各位高手能说说弹出的信息是啥意思吗?
谢谢了!
 
>>我在TYPE与PRIVATE之间这样定义变量:
>> TForm1 = class(TForm)
>> 'i:integer;'
>> GroupBox1: TGroupBox;
>> Button1: TButton;
>> procedure Button1Click(Sender: TObject);
>> private
>> { Private declarations }
>> .....................
>> 若我这样声明,会弹出一条信息:
>> "field form1.i does not have a corresponding component."
>> 只有在private里声明才可。
在类中定义中"TForm1 = class(TForm)"和"Private"之间定义的是组件,窗体中的成员变量
要在Private和Public中定义才可。

>>但若这样声明:
>>var i:integer;
>>则不论是在第一还是第二种声明方式里,都会弹出这样的窗口
>>"expected end but var fount"
1、Var下是单元变量定义区。和Type是“同级”的。
2、一个类的定义格式如下
在Type下:
子类名 = class(父类名)
...//组件
private
...//私有成员
public
...//公共成员
published
...//公共属性
end;
在类定义中插入"var"当然会出现"expected end but var found"的提示
 
>>窗体中的成员变量要在Private和Public中定义才可。
不一定, protected中一样定义, 而且变量必须定义在过程/函数/属性之前. 即:
public
a: Integer;
constructor Create;
procedure xxxx;
...
这样是允许的, 但是
public
constructor Create;
a: Integer;
....
这样是非法的.
 
我要说句公道话了:)
问了一大摊问题才20分啊:)
到现在还赖着不给:)

 
不好意思,我是初哥,分还比较小。。。
以后我会加码的。。。
 
管他呢, 全部设为公共的, 全局的!
反正啊啦的内存大...
 
多人接受答案了。
 
后退
顶部