4

IHTMLDocument3例如,为什么不继承IHTMLDocument2?为什么不IAnyMicrosoftInterface(N)继承IAnyMicrosoftInterface(N-1)

新接口只包含新功能,但它们不继承以前接口的功能。我可以确定如果某些对象支持 ISomeInterface5那么它也支持ISomeInterface4吗?我正在为 COM 代码编写一些包装器,我需要决定,例如,html_document3 是否应该从 html_document2 派生。

4

1 回答 1

2

为什么不IAnyMicrosoftInterface(N)继承IAnyMicrosoftInterface(N-1)

下面是相反的例子:

IFilterGraph3接口继承自IFilterGraph2. IFilterGraph3也有这些类型的成员:

或者

ID2D1Bitmap1接口继承自ID2D1Bitmap. ID2D1Bitmap1也有这些类型的成员:

这是 COM 接口设计中的两种方法。它可以解决两种方式。两种方式都可以通过两个接口访问所有新旧方法(并且可能仅通过新接口)。如果您选择继承,您基本上将所有旧方法复制到新接口上,并且根本不需要旧接口。如果您选择不继承,您可以选择重新定义某些方法,例如,添加新参数并让一切看起来都很好。

我可以确定如果某个对象支持 ISomeInterface5,那么它也支持 ISomeInterface4?

不。这可能正是新实现不会拖入太多遗留内容的关键。或者,设计人员更喜欢在同一个类上重用旧/新代码,因为旧实现和新实现由同一个类支持。常规的 COM 规则在这里适用:一个对象可能实现许多接口;您QueryInterface以编程方式发现它们,并使用文档对接口可用性做出假设,以防明确承诺特定实现提供多个接口,尤其是。例如旧版本的进化界面。

于 2015-02-03T22:55:06.130 回答