gpt4 book ai didi

delphi - 在delphi中添加对象时,请弄清楚@和指针,而没有它们?

转载 作者:行者123 更新时间:2023-12-03 19:34:03 25 4
gpt4 key购买 nike

请让我理解以下代码。

procedure TForm1.Button1Click(Sender: TObject);
var
Alist: TStringlist;
i: integer;
begin
Alist:=TStringlist.Create;
Alist.Add('form1=form1');
Alist.AddObject('form1',form1); //case 1
Alist.AddObject('Pointer(form1)',Pointer(form1)); //case 2
Alist.AddObject('Pointer(@form1)',Pointer(@form1)); // case 3
Alist.AddObject('@form1',@form1); //case 4

for i:=0 to Pred(Alist.Count) do // case getname
Memo1.lines.add(Alist.Names[i]+' = '+
inttostr(integer(Alist.Objects[i])));
for i:=0 to Pred(Alist.Count) do // case getvalue
Memo1.lines.add(Alist.ValueFromIndex[i]+' = '+
inttostr(integer(Alist.Objects[i])));
end;


案例getname将生成:

form1 = 0
= 13967624
= 13967624
= 4537296
= 4537296


案例getvalue将生成

form1 = 0
orm1 = 13967624
ointer(form1) = 13967624
ointer(@form1) = 4537296
form1 = 4537296


问题:


请说明情况1,2,3和4之间的区别,尤其是情况2和3
是否可以在所有情况下始终使用它们中的任何一个,即在添加对象时始终将它们视为相同?如果没有,我什么时候应该使用它们?
我知道case getname,但是为什么case getvalue仍然可以具有Names,尽管我没有像add('form1 = form1')那样添加,并且返回的第一个字符不足?


摘录自Delphi 7。

非常感谢你的帮助。

最佳答案

关于问题#3-NamesValues仅在字符串包含NameValueSeparator(默认为=)时才有意义。您的字符串(第一个字符串除外)不包含=。在Delphi XE上,您的代码输出

form1 = 0
= 32552528
= 32552528
= 5214864
= 5214864
form1 = 0
= 32552528
= 32552528
= 5214864
= 5214864


看起来更好。

关于delphi - 在delphi中添加对象时,请弄清楚@和指针,而没有它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9138769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com