首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[ComVisible]默认和公共类COM公开有什么关系?

[ComVisible]默认和公共类COM公开有什么关系?
EN

Stack Overflow用户
提问于 2013-03-28 17:30:31
回答 2查看 33.3K关注 0票数 37

MSDN有属性。当设置[ComVisible(true)]时,我不太明白会发生什么。

MSDN说

默认值为真,这表明托管类型对COM是可见的。为了使公共托管程序集、类型成为可见的,不需要此属性;它们在默认情况下对COM是可见的。只能显示公共类型。

所以他们说,默认情况下,公共类型对COM是可见的。但他们也表示,只有公共类型可以通过设置[ComVisible(true)]来显示。这是没有意义的:如果公共类型在默认情况下是可见的,那么设置[ComVisible(true)]如何使公共类型可见?如果他们已经可见,他们将如何变得更可见?

也许我的理解是不正确的。如果有人能对上述声明作一些说明,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-28 17:40:35

如果公共类型在默认情况下是可见的,那么将ComVisible属性设置为true ComVisible(true)是如何使公共类型可见的,这是没有意义的。

默认情况下,它们是可见的,因为ComVisibleAttribute的默认值为true。将属性显式设置为true不会改变任何事情,它只会使您的意图更加明确。这是您找到的文献资料的第一行:

缺省值是true,它指示托管类型对COM是可见的。要使公共托管程序集和类型可见,不需要此属性;默认情况下,它们对COM是可见的。只能使公共类型可见。该属性不能用于使其他内部或受保护的类型对COM可见,也不能用于使不可见类型的成员可见。

基本上,如果你不自己去做的话,你可以把它想象成编译器总是默认地将[ComVisibleAttribute(true)]添加到你的代码中。

您需要设置此属性的唯一原因是防止公共类型是COM可见的(在这种情况下,您将其设置为false)。默认值已经确保了它们的可见性。

显然,非公共类型(例如,私有类型和受保护类型)不能也永远不会在COM中可见。此属性对具有此类可访问性的类型没有任何影响。

票数 22
EN

Stack Overflow用户

发布于 2013-03-29 08:50:31

诀窍是您还可以在程序集级别(在AssemblyInfo.cs中)添加此属性。如果您指定了[assembly: ComVisible(true)] (或者没有在程序集级别指定它,在默认情况下具有相同的效果),那么所有公共类和接口及其公共方法在默认情况下都是可见的。

您也可以在程序集级别设置[assembly: ComVisible(false)],然后所有公共实体在默认情况下都会产生相同的效果,就像它们上面有[ComVisible(false)]一样,因此您只能标记真正需要的类/接口/方法COM-可见([ComVisible(true)])。

这可以帮助您在有大量公共实体(如这里 )时不公开太多。如果没有这种机制,就必须将[ComVisible(false)]设置为每个不希望公开的类/接口/方法。使用[assembly: ComVisible(false)]可以使您只公开所需的内容。

而且您只能将public实体公开给COM (默认的或显式的)--更严格的可见性的实体不能暴露给COM。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15688395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档