类型等效性和嵌入的互操作类型

从 .NET Framework 4 版开始,公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中,而不是要求托管程序集从互操作程序集中获取 COM 类型的类型信息。 由于嵌入的类型信息只包含托管程序集实际所使用的类型和成员,因此两个托管程序集可能会具有相同 COM 类型的截然不同的视图。 每个托管程序集使用不同的 Type 对象来表示各自的 COM 类型视图。 公共语言运行时支持这些不同视图之间的类型等效性,这些类型包括接口、结构、枚举和委托。

类型等效性意味着,在两个托管程序集之间传递的 COM 对象在接收程序集中可以转换为适当的托管类型。

注意注意

类型等效性和嵌入的互操作类型可简化使用 COM 组件的应用程序和外接程序的部署过程,这是因为不需要使用应用程序来部署互操作程序集。共享 COM 组件的开发人员若想使其组件可供早期版本的 .NET Framework 使用,则他们仍然必须创建主互操作程序集 (PIA)。

类型等效性

COM 类型等效性支持的类型包括接口、结构、枚举和委托。 如果满足下面的所有条件,则 COM 类型符合等效要求:

  • 两个类型同时为接口、结构、枚举或委托。

  • 两个类型具有相同的标识,如下一节中所述。

  • 两个类型符合类型等效性要求,如针对类型等效性标记 COM 类型一节中所述。

类型标识

当两个类型的范围和标识相匹配时,确定这两个类型具有相同的标识;也就是说,如果两个类型中的每个类型都具有 TypeIdentifierAttribute 特性,则这两个特性具有匹配的 ScopeIdentifier 属性。 Scope 的比较不区分大小写。

如果某个类型不具有 TypeIdentifierAttribute 特性,或者具有未指定范围和标识符的 TypeIdentifierAttribute 特性,则仍可以将该类型视为符合等效性,如下所示:

针对类型等效性标记 COM 类型

可以通过以下两种方式将一个类型标记为符合类型等效性:

请参见

参考

IsEquivalentTo

概念

在托管代码中使用 COM 类型

将类型库当作程序集导入