在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么以及它们之间的关系是怎样的呢?我们在学习的过程中可能比较过多的会去关注CLR,因为CLR是.NET Framework的核心,但是我要说的是CTS和CLS更为重要,因为他们是CLR的核心。任何编程语言,如果想要在.NET CLR上执行,就必需提供一个编译器,将此语言的程序编译成.NET CLR所认识的metadata以及IL,符合CTS的规定。并非所有的语言都能和C#一样符合CTS的规范,毕竟许多语言出现在先,CTS出现在后,所以有一些旧的语言未能符合CTS的规定。这类的语言在.NET中有下列三种方式来符合CTS规范:

- 改变语言本身以符合CTS的规定。例如Visual Basic 6就为此做了大幅度的扩充与改变,加上继承的特性,这使得新版的Visual Basic .NET 差不多可以算是一个全新的语言了,犹如当年C衍生出C++一样。

- 扩充语言本身以接近CTS的规定,但仍保留不相容于CTS的语法,如此一来,程序中符合CTS规定的以CTS方式编译,不符合CTS规定的则以传统的方式编译成native code。例如C++ with Managed Extension (简称MC++) 就是如此。

- 语言本身尽量维持不变,一切都是通过超强的编译器设计来达成和CTS的相容,Eiffel就是如此的作法。例如,CTS不支援多重继承(multiple inheritance),但是Eiffel支援多重继承,通过Eiffel的编译器可以利用interface以及attribute来达到多重继承(这样的作法相当巧妙,有兴趣的读者不妨去研究一下)。

好,现在让我们来看一下它们三者的关系。

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

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

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组件实现互操作。

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

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

.NET中的CTS、CLS和CLR相关推荐

  1. 什么是CTS CLS和CLR

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

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

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

  3. .NET的3C:CTS、CLS和CLR 以及 IL

     .NET的3C:CTS.CLS和CLR .NET结合Java和COM解决方案两者优点来解决互操作性问题.类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统Common Type S ...

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

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

  5. 什么是CTS、CLS、CLR

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

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

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

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

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

  8. python @classmethod 和 @staticmethod区别,以及类中方法参数cls和self的区别

    一.@classmethod 和 @staticmethod 1.staticmethod 作用:让类中的方法变成一个普通函数(普通函数没有绑定在任何一个特定的类或者实例上.所以与不需要对象实例化就可 ...

  9. java 串口 dtr rts_串口(RS232 RS485等)通讯中RTS/CTS,DTR/DSR的含义详解

    串口(RS232 RS485等)通讯中RTS/CTS,DTR/DSR的含义详解 先贴出缩写的含义: DTR – Data Terminal Ready DSR – Data Set Ready RTS ...

最新文章

  1. 汇编转c语言,如何把汇编语言转换成C语言
  2. LeetCode:14. Longest Common Prefix
  3. Ubuntu使用技巧和注意点
  4. api怎么写_PHP开发api接口安全验证
  5. APL平台对C++开发者的价值和作用
  6. 教你如何定位及优化SQL语句的性能问题
  7. jsp页面中出现“String cannot be resolved to a type”
  8. C#_asp.net mvc 验证码功能的具体实现
  9. 快慢指针解决回文问题
  10. 尽管凭借主持人的身份成名,张绍刚先生在内心深处却对这一角色认可度很低
  11. 面试官:说说如何打破或违反双亲委派!
  12. 练T25- focus必看!所有成功截图汇总
  13. 计算机计算的应用,计算器计算
  14. ESP32 入门笔记05: BLE 蓝牙客户端和服务器 (ESP32 for Arduino IDE)
  15. 电脑连接WiFi后显示找不到……的DNS地址
  16. error: C:\projects\opencv-python\opencv\modules\imgproc\src\imgwarp.cpp:5594: error: (-215) (M0.type
  17. 在Word里怎么设置每页不同的页眉
  18. pip 下载慢——解决方法
  19. mac os 关闭sip保护有什么好处?有什么坏处?macOS为什么关闭sip?
  20. iptables使用详解

热门文章

  1. html有3d效果的网页,HTML5如何在网页中实现3D效果?
  2. dij算法堆优化_BZOJ 3040 最短路(road) 堆优化Dijkstra | 学步园
  3. confirm修改按钮文字_条码设计软件如何调整条形码与条码文字之间的距离
  4. python定时任务框架_Python定时任务框架APScheduler
  5. php技术计算字符个数的函数是什么,php计算字符串中的单词数的函数str_word_count()...
  6. python如何修改代码_不修改代码打包python机器学习工程
  7. Layui导航树美化
  8. 自定义tt文本模板实现MySql指数据库中生成实体类
  9. 淘宝内核月报 2017
  10. Go搭建静态页面server笔记