需要ClassInterfaceType.None?

时间:2009-09-16 20:31:30

标签: c# .net com interop com-interop

  1. 没有得到以下from MSDN

      

    ClassInterfaceType.None

         

    表示没有类接口   为班级生成的。如果不   接口是明确实现的,   这个班只能提供后期限制   通过IDispatch访问   接口。这是推荐的   ClassInterfaceAttribute的设置。   使用ClassInterfaceType.None是   揭示功能的唯一方法   通过接口实现   明确地由班级。

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

1 个答案:

答案 0 :(得分:8)

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

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