C#4.0新增功能04 嵌入的互操作类型
从 .NET Framework 4 开始,公共语言运行时支持将 COM 类型的类型信息直接嵌入到托管程序集中,而不要求托管程序集从互操作程序集中获取 COM 类型的类型信息。 由于嵌入式类型信息仅包含托管程序集实际使用的类型和成员,因此两个托管程序集可能具有相同 COM 类型的不同视图。 每个托管程序集都有不同的 Type 对象来表示其 COM 类型视图。公共语言运行时支持接口、结构、枚举和委托等不同视图之间的类型等效性。
类型等效性意味着从一个托管程序集传递到另一个托管程序集的 COM 对象可以转换为接收程序集中适当的托管类型。
类型等效性和嵌入式互操作类型简化了使用 COM 组件的应用程序和加载项的部署,因为无需与应用程序一起部署互操作程序集。 如果共享 COM 组件的开发人员希望较早版本的 .NET Framework 使用其组件,他们仍须创建主互操作程序集 (PIA)。
类型等效性
COM 类型的等效性支持接口、结构、枚举和委托。 如果满足以下所有条件,则 COM 类型符合等效条件:
类型是两个接口、两个结构、两个枚举或两个委托。
类型具有相同标识,如下节所述。
两种类型都符合类型等效性,如针对类型等效性标记 COM 类型部分所述。
类型标识
范围和标识匹配时,确定两种类型具有相同标识,换句话说,如果它们各自具有 TypeIdentifierAttribute 属性,并且两个属性都具有匹配的 Scope 和 Identifier 属性。 Scope的比较不区分大小写。
如果一个类型不具有 TypeIdentifierAttribute 属性,或者如果它有一个不指定范围和标识符的 TypeIdentifierAttribute 属性,仍可将该类型视为等效性,如下所示:
对于接口,使用 GuidAttribute 的值而不使用 TypeIdentifierAttribute.Scope 属性,使用 Type.FullName 属性(即类型名称,包括命名空间),而不使用 TypeIdentifierAttribute.Identifier 属性。
对于结构、枚举和委托,使用包含程序集的 GuidAttribute 而不使用 Scope 属性,使用 Type.FullName 属性而不使用 Identifier 属性。
针对类型等效性标记 COM 类型
可通过两种方式将类型标记为符合类型等效性:
将 TypeIdentifierAttribute 属性应用于该类型。
将该类型设为 COM 导入类型。 若接口有 ComImportAttribute 属性,则它是 COM 导入类型。 如果定义了其程序集具有 ImportedFromTypeLibAttribute 属性,则接口、结构、枚举或委托是 COM 导入类型。
请参阅
C#4.0新增功能04 嵌入的互操作类型的更多相关文章
- C#3.0新增功能04 扩展方法
连载目录 [已更新最新开发文章,点击查看详细] 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型 ...
- C#4.0新增功能01 动态绑定 (dynamic 类型)
连载目录 [已更新最新开发文章,点击查看详细] C# 4 引入了一个新类型 dynamic. 该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查. 大多数情况下,该对象就像 ...
- C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点
C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点 第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它 ...
- C#2.0新增功能06 协变和逆变
连载目录 [已更新最新开发文章,点击查看详细] 在 C# 中,协变和逆变能够实现数组类型.委托类型和泛型类型参数的隐式引用转换. 协变保留分配兼容性,逆变则与之相反. 以下代码演示分配兼容性.协 ...
- C#基础拾遗系列之二:C#7.0新增功能点
第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它包括封装.继承和多态性.C#面向对象的行为包括: 统一的类型系统 ...
- C#7.0新增功能点
原文地址: https://www.cnblogs.com/runningsmallguo/p/8972678.html 第二部分:C#7.0新增的功能 (1)数字字面量的提升: C#7中的数字文字 ...
- C#7.0 新增功能
连载目录 [已更新最新开发文章,点击查看详细] C# 7.0 向 C# 语言添加了许多新功能 01 out 变量 支持 out 参数的现有语法已在此版本中得到改进. 现在可以在方法调用的参数列表 ...
- C#2.0新增功能01 分布类与分部方法
连载目录 [已更新最新开发文章,点击查看详细] 分部类型 拆分一个类.一个结构.一个接口或一个方法的定义到两个或更多的文件中, 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组 ...
- 说说C# 8.0 新增功能Index和Range的^0是什么?
前言 在<C# 8.0 中使用 Index 和 Range>这篇中有人提出^0是什么意思?处于好奇就去试了,结果抛出异常.查看官方文档说^0索引与 sequence[sequence.Le ...
随机推荐
- Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)
When compiling Qt you can choose one of these options based on the configure command line: no OpenSS ...
- [转]UE的职责
最近开始负责产品工作,从产品定位到需求文档再到原型设计,以及后续产品的路线规划,渐渐感觉忙不过来了.所以准备招一个UE/X来辅助. 以前做项目,也没接触过什么UE,所以对UE的工作不是很清楚,尤其是P ...
- C#每天进步一点--事件
事件:如果类型定义了事件成员,那么类型就可以通知其他对象发生了特定的事情.例如,Button类提供了一个名为Click的事件.应用程序中的一个或者多个对象可能想接收关于这个事件的通知,以便在Butto ...
- Hibernate注解(二):关联关系映射注解
关联关系映射注解以下项目均在之前相应代码的基础上进行的修改.这些项目均需要做的是: 删除映射文件 在hibernate.cfg.xml中注册实体类 注解的重要位置在实体类中关联属性上.这里是关联 ...
- 第一个SpringBoot测试实例
1.SpringBoot项目构建:http://start-spring.io 自动化构建SpringBoot项目,保存在本地并解压 2.安装gradle并配置gradle环境 3.配置阿里云ma ...
- DHCP命令执行CVE-2018-1111漏洞复现
DHCP命令执行_CVE-2018-1111漏洞复现 一.漏洞描述 在Red Hat Enterprise Linux多个版本的DHCP客户端软件包所包含的NetworkManager集成脚本中发现了 ...
- java源码解析之String类(一)
String是我们接触最多的类,无论是学习中还是工作中,基本每天都会和字符串打交道,从字符串本身的各种拼接.切片.变形,再到和其他基本数据类型的转换,几乎无时无刻都在使用它,今天就让我们揭开Strin ...
- Codeforces Round #569 (Div. 2)A. Alex and a Rhombus
A. Alex and a Rhombus 题目链接:http://codeforces.com/contest/1180/problem/A 题目: While playing with geome ...
- Knative 初体验:Build Hello World
作者 | 阿里云智能事业群技术专家 冬岛 Build 模块提供了一套 Pipeline 机制.Pipeline 的每一个步骤都可以执行一个动作,这个动作可以是把源码编译成二进制.可以是编译镜像也可以是 ...
- 24 | 紧跟时代步伐:微服务模式下API测试要怎么做?