【问题标题】:Need of ClassInterfaceType.None?需要 ClassInterfaceType.None 吗?
【发布时间】:2010-11-28 22:46:52
【问题描述】:
-
没有完全得到以下from MSDN:
ClassInterfaceType.None
表示没有类接口
为类生成。如果不
接口是显式实现的,
该类只能提供后期绑定
通过IDispatch访问
界面。这是推荐的
ClassInterfaceAttribute 的设置。
使用ClassInterfaceType.None 是
公开功能的唯一方法
通过实现的接口
由类明确。
[ComVisible(true)] 是 COM 可见性的必要条件吗?
【问题讨论】:
标签:
c#
.net
com
interop
com-interop
【解决方案1】:
请参阅this blog post 了解第一个问题的展开。关键是除非您指定ClassInterfaceType.None,否则会生成一个额外的接口,如果您更改方法的顺序、更改它们的签名或删除其中一些,这可能会导致二进制兼容性问题。一个更好的选择是显式定义一个接口并从它继承你的类,指定ClassInterfaceType.None。
ComVisible(true) 对于 COM 可见性不是必需的。默认情况下,公共类的所有公共方法和所有公共类都是 COM 可见的,所有其他实体都是 COM 不可见的。如果你需要改变它,你可以使用 ComVisible 属性,通常是为了减少 COM 可见类的数量,因为对于每个 COM 可见类,都会生成注册表项和类型库项,这会导致不必要的注册表污染并膨胀类型库。 IMO 最好用 ComVisible 明确标记所有公共实体。