从 .NET Framework 4 开始,公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中,而不要求托管程序集从互操做程序集中获取 COM 类型的类型信息。 因为嵌入式类型信息仅包含托管程序集实际使用的类型和成员,所以两个托管程序集可能具备相同 COM 类型的不一样视图。 每一个托管程序集都有不一样的 Type 对象来表示其 COM 类型视图。公共语言运行时支持接口、结构、枚举和委托等不一样视图之间的类型等效性。html
类型等效性意味着从一个托管程序集传递到另外一个托管程序集的 COM 对象能够转换为接收程序集中适当的托管类型。api
类型等效性和嵌入式互操做类型简化了使用 COM 组件的应用程序和加载项的部署,由于无需与应用程序一块儿部署互操做程序集。 若是共享 COM 组件的开发人员但愿较早版本的 .NET Framework 使用其组件,他们仍须建立主互操做程序集 (PIA)。ide
COM 类型的等效性支持接口、结构、枚举和委托。 若是知足如下全部条件,则 COM 类型符合等效条件:ui
类型是两个接口、两个结构、两个枚举或两个委托。spa
类型具备相同标识,以下节所述。htm
两种类型都符合类型等效性,如针对类型等效性标记 COM 类型部分所述。对象
范围和标识匹配时,肯定两种类型具备相同标识,换句话说,若是它们各自具备 TypeIdentifierAttribute 属性,而且两个属性都具备匹配的 Scope 和 Identifier 属性。 Scope的比较不区分大小写。blog
若是一个类型不具备 TypeIdentifierAttribute 属性,或者若是它有一个不指定范围和标识符的 TypeIdentifierAttribute 属性,仍可将该类型视为等效性,以下所示:接口
对于接口,使用 GuidAttribute 的值而不使用 TypeIdentifierAttribute.Scope 属性,使用 Type.FullName 属性(即类型名称,包括命名空间),而不使用 TypeIdentifierAttribute.Identifier 属性。开发
对于结构、枚举和委托,使用包含程序集的 GuidAttribute 而不使用 Scope 属性,使用 Type.FullName 属性而不使用 Identifier 属性。
可经过两种方式将类型标记为符合类型等效性:
将 TypeIdentifierAttribute 属性应用于该类型。
将该类型设为 COM 导入类型。 若接口有 ComImportAttribute 属性,则它是 COM 导入类型。 若是定义了其程序集具备 ImportedFromTypeLibAttribute 属性,则接口、结构、枚举或委托是 COM 导入类型。