请教,关于Delphi对象引用的一点疑惑?(50分)

  • 主题发起人 主题发起人 Archerfl
  • 开始时间 开始时间
A

Archerfl

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是我的一段代码:
procedure TForm1.Button1Click(Sender: TObject);
var
Btn1: TButton;
Btn2: ^TButton;
begin
Btn1 := TButton.Create(nil);
Btn1.Parent := self;
Btn1.SetBounds(20,20,200,20);
Btn1.Visible := True;
Btn2 := @Btn1;
Btn2.Caption := 'Ok';
//Btn2^.Caption := 'Ok';这样写也能通过
end;
Delphi的对象模型是基于对象引用的,当我们声明一个类的实例时,实际是声明了一个对象
引用,相当于C++中的对象指针。如上面的Btn1声明。但是你却不用在类类型前加^符号,如
这样var Btn1: ^TButton。那么这句事我想应该是编译器代劳了呢,还是其它什么原因呢?
但假如我硬是要加上^的话,那么是不是就相当于二级指针了呢?而且我上面那样改写Btn1
的Caption时不加^在Btn2后也可以,搞不懂,难道这又是编译器干的事吗?
请高手指点一二,我个人感觉OP的这种语法形式很容易让人产生歧义,不如C++清晰。
 
>>Delphi的对象模型是基于对象引用的,当我们声明一个类的实例时,实际是声明了一个对象
>>引用,相当于C++中的对象指针
正如你所说的,delphi中好多的地方是c++中所不允许的,但是用起来就是简单些,主要是你的
btn2是用来干什么的。难道你不觉得象btn1那样用起来方便些吗?
 
在实际编程当中,当然我会用Btn1这种声明形式,但我们研究问题要深入进去,概念一定要
清晰才行,既然编译器能够通过我的那种Btn2声明,就应该有它的道理!否则Borland那帮技
术专家不是白混了吗?
 
我方表示严重关注,呵呵[:D]
 
后退
顶部