我很想知道为什么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;
Run Code Online (Sandbox Code Playgroud)
如果我尝试为Rec属性的任何成员赋值,我将得到"左侧无法分配"错误:
procedure TForm1.DoSomething(ARec: TRec);
begin
Rec.A := ARec.A;
end;
Run Code Online (Sandbox Code Playgroud)
允许对底层字段执行相同操作:
procedure TForm1.DoSomething(ARec: TRec);
begin
FRec.A := ARec.A;
end;
Run Code Online (Sandbox Code Playgroud)
这种行为有什么解释吗?
我想把记录作为对象的属性.问题是,当我更改此记录的其中一个字段时,该对象不知道该更改.
type
TMyRecord = record
SomeField: Integer;
end;
TMyObject = class(TObject)
private
FSomeRecord: TMyRecord;
procedure SetSomeRecord(const Value: TMyRecord);
public
property SomeRecord: TMyRecord read FSomeRecord write SetSomeRecord;
end;
Run Code Online (Sandbox Code Playgroud)
如果我这样做......
MyObject.SomeRecord.SomeField:= 5;
Run Code Online (Sandbox Code Playgroud)
...不管用.
那么当记录其中一个记录的字段时,如何使属性设置过程'catch'?也许在如何申报记录方面有一些诀窍?
更多信息
我的目标是避免创建一个TObject或TPersistent一个OnChange事件(例如TFont或TStringList).我非常熟悉为此使用对象,但是为了尝试清理我的代码,我看到我是否可以使用Record.我只需要确保在设置其中一个记录字段时可以正确调用我的记录属性设置器.