我正在构建一个需要从VBA引用的库,所以我需要提供一个类型库来支持早期绑定。我见过的大多数例子都定义了暴露给COM的类的接口,例如为COM类定义接口的优点是什么?
[Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyClass
[Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("MyNamespace.MyClass")]
public class MyClass : IMyClass
让类直接使用ClassInterface.AutoDual实现接口有什么缺点吗?对于更复杂的类,我喜欢使用接口来清楚地定义哪些成员暴露com,而无需到处使用ComVisible属性。但是我也会有一些相当平凡的数据类,比如事件参数,这些参数将全部公开给COM。我也看到了一些明确设置接口不匹配的例子 - 这样做有什么优势吗?
关于为什么你需要一个接口和'ClassInterfaceType.None',请看这个问题http://stackoverflow.com/q/1435295/57428。 – sharptooth 2011-04-26 05:26:11