为什么Office Interop API中存在接口/类(IFoo,FooClass)模式?
-
06-07-2019 - |
题
在Microsoft.Office.Interop.Visio库中,每个实体(例如Shape)被描述为类(ShapeClass)和接口Shape。
因此,对于您拥有的每个元素:
interface Shape { ... }
class ShapeClass : Shape { ... }
interface Page { ... }
class PageClass : Page { ... }
...
为什么这样设计?
解决方案
“互操作”命名空间的一部分暗示这实际上是一个基于COM的API。
COM是微软首次尝试面向开发人员的语言中立组件模型,其核心原则之一是基于接口的设计。因此,在您的示例中, ShapeClass
称为“co-class”,它是 Shape
接口的命名实现。
Co-classes在全球注册(在Win32注册表中),可以根据其友好名称(“prog-ID”)或名为“CLSID”的GUID创建。
其他提示
我想这将是因为它们都是作为COM对象实现的,接口是为了定义类实现的契约 - 接口将在IDL中实现
因为这就是COM的工作原理。
COM定义组件实现的接口。几乎COM中的所有内容都基于接口。接口比实现它们的类更重要。
这是基于COM的工作方式。
如果您正在寻找良好的.Net设计示例,请 NOT 查看Office互操作库(PIA)。它们是COM等价物的直接包装器,在C#中使用起来非常糟糕。
要使Office库更易于使用,请尝试使用 VSTO Power Tools
不隶属于 StackOverflow