加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – InstanceClass.NewInstance vs InstanceClass.Create

发布时间:2020-12-15 04:23:01 所属栏目:大数据 来源:网络整理
导读:InstanceClass.NewInstance Instance.Create和InstanceClass.Create之间有什么不同; 方法一: Instance := TComponent(InstanceClass.NewInstance);Instance.Create(Self); 方法2: Instance := InstanceClass.Create(Self); 哪个更好? 解决方法 如果合适的
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参数传递的表单变量.关于这一点的一点是这段代码在调用构造函数之前分配了表单变量.通常,只有在构造函数完成后才会进行赋值.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读