TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)看VCL源代码中的TComponent,为何TComponent没有继续IDispatch接口,但会实现IDispatch的接口方法?

解决方案 »

  1.   

    TComponent = class(TPersistent, IInterface, IInterfaceComponentReference) 看VCL源代码中的TComponent的定义,为何TComponent没有继承IDispatch接口,但会实现IDispatch的接口方法?
      

  2.   

    D3版本开始,VCL已经在TComponent里实现了IUnknown和IDispatch接口,让所有从TComponent继承下来的VCL控件可以容易的变成AutoMation对象D5版本在ObjectPascal有了正式的接口机制后便改善了TComponent的声明,可以说TComponent就是COM组件类了D7版本,TComponent已经声明实现了IInterface的所有接口并在实现部分实现了IInterface的所有方法COM规范说,只要是支持IUnknown接口的对象就是COM对象,所以TComponent和它所有的派生类已经是合格的COM类了
    至于楼主的问题这么设计的原因是将来只要在派生类里声明IDispatch接口就可以了,而不需要重复的实现IDispatch的方法了,因为TComponent已经都实现了
      

  3.   

    Inside VCL 第7章 有详细阐述
      

  4.   

    那不如直接在TComponent声明中直接加上IDispatch好了