再请教一点关于变量的问题。(50分)

  • 主题发起人 主题发起人 ft
  • 开始时间 开始时间
F

ft

Unregistered / Unconfirmed
GUEST, unregistred user!
1.在一个Form中几个位置定义一个变量a ,意义相同么?
unit unit1;
...
type
TForm1 = class(TForm)
... <--- 位置1,这可以么?
private
{ Private declarations } <--- 位置2,这可以么?
public
{ Public declarations } <--- 位置3,这可以么?

var
a : string; <---位置4
implementation
a : string; <---位置5 ,和4有什么区别?

2.如果unit2中需要用到unit1中的这个a,改怎么办,比如我想让Form2中的Label1在窗口打
开时显示a,该怎么做?

谢谢!
不好意思,我分数很少,只有50分了,嘻嘻。



 
1、 位置1、2、3是在form的定义范围内,应该不行的
4的位置和5的位置都可以,也有区别,具体说不上来,但如果unit1的unit2交叉引用的时候
两个必须不在同样的位置,负责就会出错。

2、在FORM2的OnActivate这样写:
label1.caption:=unit1.a;
implementation下面加uses unit1
 
1.
放到位置 1 我也不是很清楚,我的理解是类的 protected 域,但由 Delphi 自动管理,
一般放这儿的东东都是Delphi 自动生成的,自动删除的。自己的东东最好不要放到这儿。

放到位置 2 是类的 private 域,只能在本单元的代码中访问

放到位置 3 是类的 public 域,可以在任何访问该类的地方访问。

放到位置 4 是 全局的变量,可以在任何引用了该单元的地方访问。

放到位置 5 是局部的变量,只能在本单元的代码中访问。

2,a 定义在 3,4 都可以,只要在 unit2 中 uses unit1 就可以了,

可以在 form2.OnCreate 事件中写 label1.caption:= a;
 
再问一下,为什么unit相互uses的话,位置必须不同?那该怎么处理?
 
会产生循环引用,无法编译,

办法是 一个引用放在 implementation 之前,一个放在之后
 
哦,谢谢!嗯,还有,FormCreate和FormActivate有什么区别?

PS:我刚才把交叉的两个uses都放在implementation之后,怎么没出现错误,可能我实
际上并未uses,是不是尽量不该这样?
 
formcreate是form创建时触发,一个form只有一次
formactivate是重新激活时触发,如从后面到前面也激发的,前者就不会再触发了

交叉引用不是尽量而是不能都放在implementation里,负责无法编译的。

还是你的运气特好。机器不找你麻烦

哈哈
 
呵呵,谢谢两位了!
 
1、
位置1不可放自己的变量;
位置2、位置3都可以定义自己的变量,但是不同的:
在类定义中定义变量就被类封装起来,在位置2定义的变量叫做私有变量,只可被本类的方法
访问到,在位置3定义的变量叫公有变量,类公有变量可以通过类实例由外部访问,如:
a:=form1.ntype;
位置4、位置5是从属于文件(单元)的,它可以在本单元的任何地方被访问,但它们也有不同,
具体来说是静态全局变量与动态全局变量的区别吧(对内存的操作不同)。
2、
都可以,但有区别的。
 
同意940801的说法,但(form2.OnCreate 事件中写 label1.caption:= a;)

应该改为(label1.caption:= form1.a;)
 
lichaogang 兄对面向对象很有研究啊,有机会我们交流交流吧

有几点和老兄讨论:

1。位置1 我又想了一下,觉得还是应该是 Form 才有的特殊的 public 段,在这儿放自己
的东东是可以的,但不值得提倡。

2。位置2 是私有成员,但并不只是本类的方法才可以访问,Delphi 5 没有了友类的概念了
但在同一单元的类实际上还是隐含的友类,它们可以互相访问对方的私有成员。

3。老兄对位置4和5可能理解有误,不是静态与动态之分,而是全局与局部之分,对内存的
操作是一样的,但数据段不一样
 
后退
顶部