参考界面与实现它的对象?

时间:2015-06-22 08:39:21

标签: delphi

鉴于以下声明:

var XML:IXMLDocument;

var XML:TXMLDocument;

从最终用户的角度来看,使用XML变量有什么不同?什么是首选?

1 个答案:

答案 0 :(得分:1)

差异在documentation

中解释
  

在没有所有者的情况下创建TXMLDocument时,它的行为类似于接口对象。也就是说,当释放对其接口的所有引用时,将自动释放TXMLDocument实例。但是,当使用所有者创建TXMLDocument时,它的行为与任何其他组件一样,并由其所有者释放。将组件选项板中的TXMLDocument组件添加到表单或数据模块时,将使用所有者自动创建该组件。使用全局LoadXMLDocument函数(或通过XML数据绑定向导生成的函数来返回文档的根节点)创建TXMLDocument组件时,该函数将创建一个没有所有者的TXMLDocument实例。

因此,如果在没有所有者的情况下创建对象,则其生命周期由接口引用计数管理。您应该声明您的文档变量:

var 
  XMLDocument: IXMLDocument;

只要此变量保留在范围内,并且未分配新值,XML文档对象将保持活动状态。一旦变量离开作用域或被赋值,XML文档就会被销毁。

另一方面,如果对象是使用所有者创建的,则该所有者负责销毁该对象。在这种操作模式中,无论是通过其接口引用对象还是直接引用实现对象,都无关紧要。但是,我觉得引用实现对象是惯用的,就像你对任何其他TComponent实例一样。

var 
  XMLDocument: TXMLDocument;

您选择的路由取决于您希望在代码中使用哪个生命周期管理选项。我认为不可能给你更多的指导。这两种选择都有其自己的位置。