在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么以及它们之间的关系是怎样的呢?任何编程语言,如果想要在.NET CLR上执行,就必需提供一个编译器,将此语言的程序编译成.NET CLR所认识的metadata以及中间语言IL,符合CTS的规定。

(1)CTS通用类型系统(Common Type System)

任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。例如,用户能够在VB.NET中派生一个由C#编写的类。我们可以将CTS 看成是所有.NET 语言的superset (union),而符合CTS 的各种不同的语言,其实都只是CTS 的subset (intersection)。这些语言所写出来的程序,如果想要有最佳的相容性,以便互相调用(invoke) 或继承,这些语言之间就必需取得一个共同的subset,有共同遵守的规范,这就是CLS 。简单的理解就是,比如C#和VB在数据类型上有区别,编译成IL时,必须数据类型进行标准化处理。

(2)CLS通用语言规范(Common Language Specification)

显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,一些语言支持无符号数据类型,一些语言支持运算符重载。用户应认识到这一点,因此.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。简单的理解就是,比如C#和VB在语法上有区别,编译成IL时,必须对语言进行标准化处理。

(3)CLR公共语言运行库(Common Language Runtime)

简单地说,CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收和安全检查。在CLR监控之下运行的代码,称为托管代码(managed code)。简单的说,公共语言运行的时候,就是将我们写的代码编译成微软的中间语言。

CLR=CTS+CLS

最新文章

  1. linux基础1——网络配置入门
  2. 技术英文单词贴--W
  3. 从零开始攻略PHP(8)——面向对象(下)
  4. SQL中让某一字段更新时自动加1
  5. Java多线程之锁
  6. JAVA-应用easyui
  7. NPOI+ExcelReport
  8. ASP.NET Core中如何调整HTTP请求大小的几种方式
  9. XPath和CssSelector定位总结
  10. spring mvc 在上传图片时,浏览器报The request sent by the client was syntactically incorrect
  11. VueJS教程
  12. 解决Eclipse中DDMS一直打印输出Connection attempts的问题
  13. 使用 HTMLTestRunner 模块生成HTML格式的测试报告文件
  14. C++之 模板Template的使用
  15. bzoj 1179
  16. Nginx源代码分析—业务流程
  17. Rest和WebService的区别
  18. VC++ 6.0如何创建与调用动态链接库
  19. Waltz of love
  20. 运维必须掌握的Linux面试题

热门文章

  1. B2. Wonderful Coloring - 2
  2. 手写tomcat——有线程池化能力的servlet 服务
  3. 【Vue学习笔记】—— vue的基础语法 { }
  4. .NET 7 SDK 开始 支持构建容器化应用程序
  5. Elasticsearch 索引生命周期管理 ILM 实战指南
  6. 使用docker-compose方式安装redash
  7. Beats:使用 Filebeat 导入 JSON 格式的日志文件
  8. Css3中自适应布局单位vh、vw
  9. C/C++ 关于默认构造函数
  10. LeetCode - 数组遍历