gpt4 book ai didi

delphi - "Left side cannot be assigned to"用于 Delphi 中的记录类型属性

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

我很好奇为什么 Delphi 将记录类型属性视为只读:

  TRec = record
A : integer;
B : string;
end;

TForm1 = class(TForm)
private
FRec : TRec;
public
procedure DoSomething(ARec: TRec);
property Rec : TRec read FRec write FRec;
end;

如果我尝试将值分配给 Rec 属性的任何成员,我将收到“左侧无法分配给”错误:

procedure TForm1.DoSomething(ARec: TRec);
begin
Rec.A := ARec.A;
end;

同时允许对基础字段执行相同的操作:

procedure TForm1.DoSomething(ARec: TRec);
begin
FRec.A := ARec.A;
end;

对于这种行为有什么解释吗?

最佳答案

由于“Rec”是一个属性,编译器对其的处理方式略有不同,因为它必须首先评估属性 decl 的“读取”。考虑一下,它在语义上与您的示例等效:

...
property Rec: TRec read GetRec write FRec;
...

如果你这样看,你会发现对“Rec”的第一次引用(在点“.”之前)必须调用 GetRec,这将创建 Rec 的临时本地副本。这些临时对象被设计为“只读”。这就是您遇到的情况。

您可以在此处执行的另一件事是将记录的各个字段分解为包含类的属性:

...
property RecField: Integer read FRec.A write FRec.A;
...

这将允许您通过属性直接分配给类实例中嵌入记录的字段。

关于delphi - "Left side cannot be assigned to"用于 Delphi 中的记录类型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/620506/

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