簡體   English   中英

與[ComVisible]默認和公共類COM暴露有什么關系?

[英]What's the deal with [ComVisible] default and public classes COM exposure?

MSDN有關於[ComVisible]屬性的這篇文章 當設置[ComVisible(true)]時,我不太清楚會發生什么。

MSDN說

默認值為true ,表示托管類型對COM可見。 不需要此屬性來使公共托管程序集類型可見 ; 它們在默認情況下對COM可見。 只有公共類型才能顯示。

所以他們說公共類型默認是COM可見的。 但是他們也說通過設置[ComVisible(true)] 只能使公共類型可見 這沒有意義:如果默認情況下公共類型是可見的,那么設置[ComVisible(true)]使公共類型可見? 如果它們已經可見,它們將如何變得更加醒目?

也許我的理解不正確。 如果有人能對上述陳述有所了解,我將不勝感激。

訣竅是你也可以在程序集級別添加這個屬性(在AssemblyInfo.cs中)。 如果指定[assembly: ComVisible(true)] (或者不在程序集級別指定,默認情況下具有相同的效果),則默認情況下,所有公共類和接口及其公共方法都將變為COM可見。

您也可以在程序集級別設置[assembly: ComVisible(false)] ,然后默認情況下所有公共實體都具有與它們[ComVisible(false)]相同的效果,因此您只能標記這些類/ interfaces / methods COM-visible( [ComVisible(true)] )你真正需要的。

這有助於您在此處擁有大量公共實體時不會暴露太多。 如果沒有此機制,則必須將[ComVisible(false)]為您不希望公開的每個類/接口/方法。 使用[assembly: ComVisible(false)]可以讓你只展示你需要的東西。

而且您只能將public實體暴露給COM(默認或顯式) - 具有更嚴格可見性的實體無法向COM公開。

沒有意義,默認情況下公共類型是可見的,因此如何將ComVisible屬性設置為true [ComVisible(true)]使公共類型可見。

它們默認是可見的,因為ComVisibleAttribute的默認值為true。 將屬性顯式設置為true不會改變任何內容,只會使您的意圖更加清晰。 這是您找到的文檔的第一行:

默認值為true ,表示托管類型對COM可見。 不需要此屬性來使公共托管程序集和類型可見; 它們在默認情況下對COM可見。 只有公共類型才能顯示。 該屬性不能用於使COM可見的內部或受保護類型或使不可見類型的成員可見。

基本上,您可以將其[ComVisibleAttribute(true)]編譯器默認情況下將[ComVisibleAttribute(true)]到您的代碼中,如果您自己不這樣做的話。

您需要設置此屬性的唯一原因是為了防止公共類型變為COM可見(在這種情況下,您將其設置為false)。 默認值已確保其可見性。

顯然,非公開類型(例如,私有和受保護的)不能也不會被COM看到。 此屬性對具有此類可訪問性的類型沒有影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM