[英]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.