.NET的3C:CTS、CLS和CLR

.NET结合Java和COM解决方案两者优点来解决互操作性问题。类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统Common Type System(CTS)的类型标准。这个类型系统不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展。任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的映射。所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供了语言之间的继承性。例如,用户能够在VB.NET中派生一个由C#编写的类。

很显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,一些语言支持无符号数据类型,一些语言支持运算符重载。用户应认识到这一点,因此.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。

CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。这里用的是“可能不”,而不是“不可能”,因为这一问题实际依赖于对non-CLS-compliant项的可见性。事实上,CLS规则只适用于或部分适用于那些与其他组件存在联系的组件中的类型。实际上,用户能够安全实现含私有组件的项目,而该组件使用了用户所选择使用的.NET语言的全部功能,且无需遵守CLS的规范。另一方面,如果用户需要.NET语言的互操作性,那么用户的组件中的公共项必须完全符合CLS规范。让我们来看下面的C#代码:

public class Foo

{

// The uint(unsigned integer)type is non-CLS compliant.

//But since this item is private,the CLS rules do not apply.

private uint A = 4;

// Since shis uint member is public,we have a CLS

// compliance issue.

public uint B = 5;

// The long type is CLS compliant.

public long GetA()

{

return A;

}

}

最后一个C是公共语言运行库Common Language Runtime(CLR)。简单地说,CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收和安全检查。在CLR监控之下运行的代码,称为托管代码(managed code)。作为类库,CLR提供上百个可用的有用类型,而这些类型可通过继承进行扩展。对于文件I/O、创建对话框、启动线程等类型——基本上能使用Windows API来完成的操作,都可由其完成。

让我们正确看待“3C”。开发人员在构建自己的分布式应用程序时,因为用户在编程时将直接面对CLR,应将主要精力放在学习了解CLR上,而不是CTS和CLS。而对于希望以.NET平台为目标的语言和工具开发商来说,就需要深入理解CTS和CLS。互操作性组件是分布式应用的关键,因此理解.NET如何通过定义公共类型实现这一目标,也就显得十分重要。

所有.NET语言编译器生成与平台无关的代码,称为通用中间语言(CIL,简称IL)。从概念上来讲,这一点非常类似Java中的字节码。但与Java字节码所不同的是,Microsoft设计的IL可以由任一语言编译器很容易地生成。

前面提到的,程序集包含IL,而不是源代码。在运行过程中,当第一次调用一个方法,为了更快的执行程序,实时Just-In-Time (JIT)编译器将该方法的IL代码转换成源代码(与平台有关)。.NET只编译需要在运行库中使用的那部分IL。当然,它将会把转换得到的源代码放入缓存中,以便以后的调用能够直接使用该源代码。

同时考虑到CTS和CLR,IL为.NET提供了除了Windows之外,还能移植到其他操作系统的可能。如果可能的话,用户可以用任何一种语言开发与平台无关的应用程序。当然,这里有一个关键词是“可能”,因为目前.NET只能在Windows操作系统上运行。

.NET的3C:CTS、CLS和CLR 以及 IL相关推荐

  1. 什么是CTS CLS和CLR

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 什么是C ...

  2. 什么是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT

    什么是.NET? 起源:比尔盖茨在2000年的Professional Developers Conference介绍了一个崭新的平台叫作Next Generation Windows Service ...

  3. CTS、CLS、CLR分别作何解释

    CTS.CLS.CLR分别作何解释? a. CTS:通用类型系统 (commontype system).一种确定公共语言运行库如何定义.使用和管理类型的规范.即Int32.Int16→int.Str ...

  4. 什么是CTS、CLS、CLR

    什么是CTS.CLS.CLR CTS:Common Type System 通用类型系统. CLS:Common Language Language Specification 通用语言规范. CLR ...

  5. CTS、CLS和CLR分别作何解释?

    CTS.CLS和CLR分别作何解释? 问题阐述 CTS.CLS和CLR分别是什么意思? 专家解答 CTS.CLS和CLR是.NET框架的3个核心部分,下面分别对它们进行介绍. (1)CTS CTS即通 ...

  6. .NET中 ,CTS、CLS和CLR分别作何解释?

    1.CTS:通用语言系统 CTS:Common Type System 通用类型系统.Int32.Int16→int.String→string.Boolean→bool.每种语言都定义了自己的类型, ...

  7. .NET中的CTS、CLS和CLR

    在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么以及它们之间的关系是怎样的呢?我们在学习的过程中可能比较过多的会去关注CLR,因为CLR是.NET Framework的核心 ...

  8. CLR,CTS,CLS

    理论: CLR是.NET Framework的核心,而CTS(common Type System)和CLS(common language System)是CLR的核心.任何编程语言,如果想要在.N ...

  9. C# 中的CTS、ClS、ClR的用途

    在描述以上三个概念之前要先知道IL: IL(intermediate language)) 中间语言,是经过编译之后可以执行的二进制代码,实现了.net平台的互联互通,后缀名为.exe或.dll. 1 ...

最新文章

  1. python扫雷代码文件_基于Python实现的扫雷游戏实例代码
  2. 硬链接和软链接使用,以及区别
  3. 图解SQLite教程
  4. php中http有哪些状态码,http状态码是什么意思?http常用状态码有哪些
  5. 微软武汉.NET俱乐部八月活动
  6. java 图形界面---字体的设置
  7. LeetCode:每日一题(2020.4.7)
  8. 利用 Google API 调用谷歌地图 演示1
  9. sg11解密 php解密 SourceGuardian解密sg_load解密去除域名IP授权
  10. 魔兽争霸无法在这个计算机,win10魔兽争霸三无法初始化directx怎么办_win10魔兽争霸三不能初始化directx解决步骤...
  11. Snort的TILE64移植
  12. php编辑器浅色还是深色,程序员的IDE到底是浅色主题好还是深色主题好?
  13. html级联选择器,级联选择器
  14. 易语言API获取进程程序路径
  15. db2 SEQUENCE
  16. Kubenetes1.13.1集群部署 --01基于Kubeadm搭建Kubernetes
  17. Windows 10 任务管理器重置偏好设置
  18. 泛目录程序-泛目录站群程序-免费泛目录站群管理工具下载
  19. 企业级的商用远程控制软件有哪些
  20. 安装node npm

热门文章

  1. Alpha阶段事后分析
  2. 企业级 SpringBoot 教程 (二十三)异步方法
  3. [Nginx] Nginx 配置location总结
  4. T-Mobile旗下网站又曝安全漏洞 允许任何人查看他人账户信息
  5. 2018年计划读书清单
  6. Ajax Control Toolkit Animation 想说爱你不容易
  7. MSN8.0测试邀请发放
  8. css3 动画 火箭,CSS3 火箭发射动画 寓意创新起航
  9. 内存对齐/字节对齐/数据对齐/地址总线对齐
  10. 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数