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++清晰。
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++清晰。