为什么Office Interop API中存在接口/类(IFoo,FooClass)模式?

时间:2009-07-31 15:00:35

标签: c# com com-interop

在Microsoft.Office.Interop.Visio库中,每个实体(例如Shape)被描述为类(ShapeClass)和接口Shape。

因此,对于您拥有的每个元素:

interface Shape { ... }
class ShapeClass : Shape { ... }

interface Page { ... }
class PageClass : Page { ... }

...

为什么这样设计?

4 个答案:

答案 0 :(得分:1)

命名空间的“Interop”部分暗示这实际上是一个基于COM的API。

COM是微软首次尝试面向开发人员的语言中立组件模型,其核心原则之一是基于接口的设计。

因此,在您的示例中,ShapeClass被称为“共同类”,它是Shape接口的命名实现。

Co-classes在全球注册(在Win32注册表中),可以根据友好名称(“prog-ID”)或名为“CLSID”的GUID创建。

答案 1 :(得分:0)

我想这将是因为它们都是作为COM对象实现的,接口是为了定义类实现的契约 - 接口将在IDL中实现

wiki COM

答案 2 :(得分:0)

因为这就是COM的工作原理。

COM定义组件实现的接口。几乎COM中的所有内容都基于接口。接口比实现它们的类更重要。

答案 3 :(得分:0)

这是基于COM的工作方式。

如果您正在寻找良好的.Net设计示例,请 NOT 查看Office互操作库(PIA)。它们是COM等价物的直接包装器,在C#中使用起来非常糟糕。

要使Office库更易于使用,请尝试VSTO Power Tools