我正在構建一個需要從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