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参数传递的表单变量.关于这一点的一点是这段代码在调用构造函数之前分配了表单变量.通常,只有在构造函数完成后才会进行赋值.
据推测,这是因为引用表单变量(通常是全局变量)的代码即使从该表单的构造函数内部调用也可以工作.这是一个非常特殊的案例,绝大多数是例外而不是规则.不要让这个特殊情况驱动您的主流编码风格.