在构建自定义组件时,我可能会实现已发布的持久属性。例如...
type
TMyComponent = class(TComponent)
private
FMyPersistent: TMyPersistent;
...
public
...
published
property MyPersistent: TMyPersistent read FMyPersistent write SetMyPersistent;
...
end;
请注意,该过程SetMyPersistent
还没有到这里,这是下一步进入的地方。我右键单击该对象并选择“光标处的完整类”(或Shift + Control + C
)以调用代码完成。当它自动创建此属性设置器时,它会自动将分配代码放入...
procedure TMyComponent.SetMyPersistent(const Value: TMyPersistent);
begin
FMyPersistent := Value;
end;
现在很高兴它继续为我完成了这项任务。但是,在正常情况下,我一直习惯于使用...
procedure TMyComponent.SetMyPersistent(const Value: TMyPersistent);
begin
FMyPersistent.Assign(Value);
end;
如果属性是String
or之类的类型Integer
,则直接赋值是正确的方法。但是在实现 a 的已发布属性时TPersistent
,使用它不是正确的方法TPersistent.Assign
吗?
使用这两种分配机制的本质区别是什么?因为如果 usingTPersistent.Assign
是正确的做法,那么代码补全有一个小缺陷——即假设它FMyPersistent := Value
被认为是“错误的”。