gpt4 book ai didi

delphi - 已发布的持久属性 - 我应该使用 FMyPercient.Assign(Value) 还是 FMyPercient := Value?

转载 作者:行者123 更新时间:2023-12-02 05:32:10 24 4
gpt4 key购买 nike

当我构建自定义组件时,我可能会实现已发布的持久属性。例如...

type
TMyComponent = class(TComponent)
private
FMyPersistent: TMyPersistent;
...
public
...
published
property MyPersistent: TMyPersistent read FMyPersistent write SetMyPersistent;
...
end;

请注意,过程 SetMyPersistent 尚未出现,这就是下一步出现的地方。我右键单击该对象并选择“Complete Class at Cursor”(或 Shift + Control + C) 来调用代码完成。当它自动创建这个属性 setter 时,它会自动将赋值代码放入...

procedure TMyComponent.SetMyPersistent(const Value: TMyPersistent);
begin
FMyPersistent := Value;
end;

现在很高兴它继续为我完成这项任务。不过,在正常情况下,我一直习惯于使用...

procedure TMyComponent.SetMyPersistent(const Value: TMyPersistent);
begin
FMyPersistent.Assign(Value);
end;

如果属性是诸如StringInteger之类的类型,则直接赋值是正确的方法。但是,在实现 TPercient 的已发布属性时,使用 TPercient.Assign 不是正确的方法吗?

使用这两种分配机制有什么本质区别?因为如果使用 TPercient.Assign 是正确的做法,那么代码完成就会有一个轻微的缺陷 - 也就是说,假设 FMyPersistent := Value 被认为是“错误的” .

最佳答案

调用分配。这就是为什么你首先要有一个属性(property)设置者。如果您要直接覆盖该字段,则不需要 setter 。覆盖它会泄漏您在构造函数中创建的原始对象。当您在对象检查器中修改属性时,您还会注意到 IDE 中存在访问冲突。

代码完成将相同的代码放入它创建的每个 setter 中。对于在最终将值存储在字段中之前需要执行其他工作的属性,因此字段存储语句是正确的。 IDE 不知道您真正想要什么。

关于delphi - 已发布的持久属性 - 我应该使用 FMyPercient.Assign(Value) 还是 FMyPercient := Value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19578977/

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