InstanceClass.NewInstance + Instance.Create和InstanceClass.Create之间有什么区别;

方法1:

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/

10-11 15:53