gpt4 book ai didi

delphi - InstanceClass.NewInstance 与 InstanceClass.Create

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

InstanceClass.NewInstance+Instance.Create 和 InstanceClass.Create 有何不同;

方法一:

Instance := TComponent(InstanceClass.NewInstance);
Instance.Create(Self);

方法2:

Instance := InstanceClass.Create(Self);

哪个更好?

最佳答案

如果合适的话,我总是会使用InstanceClass.Create——而且总是如此。

原因有很多。一个非常好的一点是单行版本更加简洁。另一个原因是单行版本是标准的、常用的方法。

另一个原因是构造函数中的异常处理,您的方法 1 没有正确管理。如果发生异常,新实例将被销毁,但实例变量仍然被赋值。这是与方法 2 的一个重要区别,并且违背了 Delphi 的所有生命周期管理约定。

您提到了TApplication.CreateForm。让我们看一下:

Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);
except
TComponent(Reference) := nil;
raise;
end;

请记住,Reference 是作为 var 参数传递的表单变量。要点是这段代码在调用构造函数之前分配该表单变量。通常,该赋值仅在构造函数完成后进行。

大概这是为了引用表单变量(通常是全局变量)的代码可以工作,即使它是从该表单的构造函数内部调用的。这是一个非常特殊的情况,绝大多数是异常(exception)而不是规则。不要让这种特殊情况影响您的主流编码风格。

关于delphi - InstanceClass.NewInstance 与 InstanceClass.Create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10460925/

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