delphi – InstanceClass.NewInstance vs InstanceClass.Create

前端之家收集整理的这篇文章主要介绍了delphi – InstanceClass.NewInstance vs InstanceClass.Create前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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参数传递的表单变量.关于这一点的一点是这段代码调用构造函数之前分配了表单变量.通常,只有在构造函数完成后才会进行赋值.

据推测,这是因为引用表单变量(通常是全局变量)的代码即使从该表单的构造函数内部调用也可以工作.这是一个非常特殊的案例,绝大多数是例外而不是规则.不要让这个特殊情况驱动您的主流编码风格.

猜你在找的Delphi相关文章