限定互通的 .NET 型別
如果您打算將組件中的型別公開給 COM 應用程式,請在設計階段考慮 COM Interop 的需求。如果您嚴格遵守以下的方針,就可以緊密地整合 Managed 型別 (類別、介面、結構和列舉) 和 COM 型別:
類別應該明確地實作介面
雖然 COM Interop 提供了一種機制,會自動產生含有類別之所有成員及其基底類別 (Base Class) 成員的介面,不過最好還是提供明確的介面。自動產生的介面稱為類別介面。如需相關方針,請參閱類別介面簡介。
您可以使用 Visual Basic 2005、C# 和 C++,將介面定義加入程式碼中,而不必使用介面定義語言 (IDL) 或其他相等的語言。如需語法的詳細資訊,請參閱您的程式語言文件。
Managed 型別必須為公用
只有組件中的公用型別會註冊及匯出至型別程式庫。因此,COM 只能看得見公用型別。
Managed 型別公開給其他 Managed 程式碼的功能不一定會公開給 COM。例如,參數型建構函式、靜態方法及常數欄位,都不會公開給 COM 用戶端。此外,當 Runtime 封送處理資料進出型別時,這些資料可能會被複製或轉換。
方法、屬性、欄位和事件必須為公用
公用型別的成員如果要讓 COM 看到的話,它們也必須是公用。您可以套用 ComVisibleAttribute 來限制組件、公用型別或公用型別之公用成員的可視性。根據預設,所以公用型別和成員都是可以看見的。
型別必須具有要從 COM 啟動的公用預設建構函式
COM 可以看得見 Managed 公用型別。但是,如果沒有公用預設建構函式 (一種沒有引數的建構函式),COM 用戶端就不能建立這個型別。如果 COM 用戶端是用其他方式啟動的,它仍然可以使用型別。
型別不可為抽象的
COM 用戶端或 .NET 用戶端都不可以建立抽象型別。
當匯出至 COM 時,Managed 型別的繼承階層架構 (Inheritance Hierarchy) 會扁平化。而且 Managed 和 Unmanaged 環境之間的版本也會不同。公開給 COM 的型別與其他 Managed 型別各有不同的版本特性。