COM:如果我更改了接口的父节点,是否需要创建新接口?

1 c++ com c++builder

我一直在为COM接口添加新功能,从我所读到的唯一方法(并保持向后兼容)是创建一个继承旧接口并添加新方法的新接口.我试过这样做,但我的层次结构已经很复杂了.

说这是我的接口当前是这样的:

IBaseInterface
    |
IDerivedInterface

我想在Base Interface中添加一些功能,它现在看起来像这样:

IBaseOldInterface
    |
IBaseInterface
    |
IDerivedInterface

因为我已经添加了这个新功能,我需要创建一个新的IDerivedInterface吗?我已经按照现在的方式尝试了它,它似乎并不适用于所有情况.

我真的想要一些确认,并在可能的情况下解释原因

我需要进一步解释我的理想情况是什么以及为什么:

我想在IBaseInterface类中添加一些方法,然后所有派生类都可以使用.我认为可能是这样的:

                   IBaseOldInterface
                  /                 \
IDerivedOldInterface               IBaseNewInterface
                   \               /
                  IDerivedNewInterface

我知道应该避免使用Diamond继承,但它们只是接口,所以我认为这样就可以了.

当用户请求其中一个INewDerivedInterfaces时,拥有这个新结构.查询接口将返回该IID的正确接口,无论是INewDerivedInterface还是IOldDerivedInterface.

Dav*_*nan 5

这不起作用.正如您所说,为了保持兼容性,您无法修改已发布的界面.但是通过更改继承,您正在修改接口.

因此,您可以将新方法添加到新的子类中,然后您将拥有此结构:

IBaseInterface
    |
IDerivedInterface
    |
IDerivedInterface2

或者你应该做的是添加一个实现对象支持的新接口.因此,您只需声明实现类支持多个接口,而不是使用继承.

在这种情况下,您将单独保留现有的继承结构,并具有以下内容:

IBaseInterface         INewInterface
    |
IDerivedInterface

然后像这样实现类:

class TMyObject: public TInterfacedObject, IDerivedInterface, INewInterface
Run Code Online (Sandbox Code Playgroud)