需要ClassInterfaceType.None?

dev*_*ull 2 .net c# com interop com-interop

  1. 从MSDN中得不到以下内容:

    ClassInterfaceType.None

    表示没有为类生成类接口.如果没有显式实现接口,则该类只能通过IDispatch 接口提供后期绑定访问.这是推荐的设置ClassInterfaceAttribute.使用ClassInterfaceType.None是通过类显式实现的接口公开功能的唯一方法.

  2. [ComVisible(true)]COM可见性是必须的吗?

sha*_*oth 8

有关第一个问题的扩展,请参阅此博客文章.关键在于,除非您指定ClassInterfaceType.None生成额外的接口,否则如果您更改方法的顺序,可能会导致二进制兼容性问题,请更改其签名或删除其中的一些.一个更好的选择是明确定义一个接口并从中继承你的类指定ClassInterfaceType.None.

ComVisible(true)COM可见性不是必须的.默认情况下,公共类和所有公共类的所有公共方法都是COM可见的,所有其他实体都不是COM可见的.如果需要更改它,则使用ComVisible属性,通常减少COM可见类的数量,因为每个COM可见类注册表项和类型库条目都会生成,这会导致不必要的注册表污染并使类型库膨胀.IMO使用ComVisible明确标记所有公共实体是个好主意.