XComponent

From Apache OpenOffice Wiki
Jump to: navigation, search


如果实现在内部持有对另一个 UNO 对象的引用,可能会出现循环引用的问题,导致您的组件或另一个对象永远不能被销毁。如果另一个对象持有对您的组件的引用,则可以实现包含方法 dispose()com.sun.star.lang.XComponent专业 UNO - UNO 概念 - UNO 对象的生存期 详细介绍了这个问题。


在 C++ 或 Java 组件中支持 XComponent 很简单,因为可以从能够实现 XComponent 的帮助程序类导出。如果必须手动实现 XComponent,请参见以下代码示例。


接口 XComponent 指定这些操作:

  // module com::sun::star::lang
 
  interface XComponent: com::sun::star::uno::XInterface
  { 
      void dispose(); 
      void addEventListener( [in] XEventListener xListener ); 
      void removeEventListener( [in] XEventListener aListener ); 
  };

这样,XComponent 对象的所有者可以解决潜在的循环引用。com.sun.star.lang.XEventListener:

  // module com::sun::star::lang
  interface XEventListener: com::sun::star::uno::XInterface
  { 
      void disposing( [in] com::sun::star::lang::EventObject Source ); 
  };


XComponent 的处置

XComponent 的设计意图是对象由第三个对象实例化,使第三个对象成为第一个对象的所有者。所有者可以调用 dispose()。所有者对您的对象调用 dispose() 时,必须执行三个操作:

  • 释放它持有的所有引用。
  • 通知已注册的 XEventListener,通过调用它们的方法 disposing() 来处置对象。
  • 以后尽可能地保持被动。如果处置之后调用实现,则在不能完成方法规范时抛出 com.sun.star.lang.DisposedException


这样,XComponent 对象的所有者可以解决潜在的循环引用。

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages