一、解释1

1、CLR(Common Language Runtime) :公共语言运行库

CLR 是CTS(Common Type System:通用类型系统)的实现,

即是说:CLR是应用程序的执行引擎和功能齐全的类库,

该类库严格按照CTS规范实现。作为程序执行引擎,CLR

负责安全地载入和运行用户程序代码,包括对不用对象的垃圾回收

和安全检查。在CLR监控之下运行的代码成为托管代码(managed code)。

2、CTS(Common Type System):通用类型系统

CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型

的方式来进行类型扩展。任何以.net平台作为目标的语言必须建立它的数据

类型与CTS的类型间的映射。

所有.NET语言共享这一类型系统,实现它们之间无缝的互操作。该方案还提供

了语言之间的继承性。例如:用户能够在VB.NET中派生一个由C#编写的类。

可以将CTS看成是所有.NET语言的superset(union),而符合CTS的各种

不同的语言,其实都只是CTS的subset(intersection)。这些语言所写出来的程序,

如想要有最佳的相容性,以便互相调用(invoke)或继承,这些语言之间就必需取得

一个共同的subset,有共同遵守的规范,这就是CLS.

3、CLS(Common Language Specification):通用语言规范。

很显然,编程语言的区别不仅仅在于类型。例如,一些语言支持多继承性,

一些语言支持无符号数据类型,一些语言支持运算符重载。

用户应认识到这一点,因此.NET通过定义公共语言规范(CLS:Common Language Specification),
限制了由这些不同引发的互操作性问题。CLS制定了一种以.NET平台为目标的语言所必须

支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。

认识到这点很重要,这里讨论的特征问题已不仅仅是语言间的简单语法区别。

例如,CLS并不去关心一种语言用什么关键字实现继承,只是关心该语言如何支持继承。

CLS是CTS的一个子集。这就意味着一种语言特征可能符合CTS标准,但又超出CLS的范畴。
例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。
因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言

(如VB.NET)设计的.NET组件实现互操作。

二、解释2

在学习.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)。

三、解释3

缩写的全称:    

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

 CLR是公共语言运行时(Common language runtime)     

 CLS是公共语言定义(Common Language Specification)
      所有类型都可以在 CTS中声明。CTS定义了一组语言编译器必须遵循的规则,以定义、引用、使用和存储引用类型和值类型。

因此,遵循CTS,在不同语言中编写的对象才能彼此交互。但并不是所有的类型都可以用于所有的语言。要建立可以在所有.NET语言中访问的组件,

就要使用CLS。有了CLS,编译器就可以根据CLS规范检查代码是否有效。
      任何支持.NET的语言都不仅仅局限于CLS定义的公共功能子集。甚至有了.NET,仍可以创建不能在不同语言中使用的组件。

这就是说,利用.NET支持所有的语言比利用COM简单得多。如果把自己限制在CLS之内,就可以保证组件可以在所有的语言中使用。

第三方编写的库很可能限制在CLS之内,以确保该库可以在所有的语言中使用。
      .NET Framework是为了支持多种语言而设计的。在设计.NET的阶段中,Microsoft让许多编译器开发商建立它们自己的.NET语言。

Microsoft自己就发布了VB.NET、Managed C++、C#、J#和JScript.NET。另外,不同开发商开发了40多种语言,

例如Cobol、Smalltalk、Perl和 Eiffel。每种语言都有其特有的优点和许多不同的功能。这些语言的编译器都进行了扩展,以支持.NET。

提示:      

CLS是一种语言必须支持的最小规范要求。如果把公共方法限制为CLS,那么支持.NET的所有语言就都可以使用我们的类!
在.NET Framework中,几乎所有(但不是所有)的类都是与CLS兼容的。在MSDN文档说明中,不兼容的类和方法都被特别标记为不兼容,

例如System命名空间中的UInt32结构。UInt32表示32位无符号整数。并不是所有的语言(例如Visual Basic.NET或J#)都支持无符号的数据类型,

这种数据类型是与CLS不兼容的。

 


       

         

 

.NET中的CTS、CLS、CLR的更多相关文章

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

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

  2. .Net 面试题 3C(CTS,CLS,CLR)

    1.CTS(Common Type System)通用类型系统 CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展.任何以.NET平台作为目标的语言必须建立它的数 ...

  3. CTS,CLS,CLR

    1)CTS通用类型系统(Common Type System) CTS不但实现了COM的变量兼容类型,而且还定义了通过用户自定义类型的方式来进行类型扩展.任何以.NET平台作为目标的语言必须建立它的数 ...

  4. .NET中的CTS、CLS和CLR

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

  5. C#.NET中的CTS、CLS和CLR

    以下内容来自:http://www.cnblogs.com/zagelover/articles/2741370.html 在学习.NET的过程中,都会不可避免地接触到这三个概念,那么这三个东西是什么 ...

  6. [No0000151]菜鸟理解.NET Framework中的CLI,CLS,CTS,CLR,FCL,BCL

    最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基础..NET Framework不是凭空出来的,实际上API,COM+,和一些相关驱动依然是它的基石..NET Framewor ...

  7. C#中IL, CTS, CLR, CLS, JIT含义

    1. IL/MSIL  (Microsoft Intermediate Language) 微软中间语言 (IL是MSIL的缩写,译为中间语言) 2. CTS  (Common Type System ...

  8. C# 中的CTS, CLS, CLR 的理解

  9. “菜”鸟理解.NET Framework(CLI,CLR,CTS,CLS,BCL,FCL)

    既然要学.NET,就要先认识认识她,我不喜欢大段大段文字的东西,自己通过理解,画个图,来看看.NET的沉鱼落雁,闭月羞花之容. 最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基 ...

随机推荐

  1. kickstart构建Live CD 添加文件问题

    在构建自定义ISO的时候,有时候需要从母体机器拷贝文件到Live CD系统.比如拷贝/home/xiaoxiaoleo/hello 程序,在Kickstart配置文件里, post脚本添加--noch ...

  2. elastaticsearch

    # https://elasticsearch-dsl.readthedocs.io/en/latest/ # 文档:https://es.xiaoleilu.com/054_Query_DSL/70 ...

  3. django-crontab

    django-cromtab实现定时任务 参考:https://www.jianshu.com/p/1def9226158d ''' 首先安装插件:pip install django-crontab ...

  4. 转: Java安全停止线程方法

    转: http://blog.csdn.net/flyingpig4/article/details/7675557 1.早期Java提供java.lang.Thread类型包含了一些列的方法star ...

  5. 【Shell 编程基础第一部分】第一个Shell脚本HelloShell及一些简单的Shell基础书写与概念;

    http://blog.csdn.net/xiaominghimi/article/details/7603000 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

  6. HTML5 拖拽事件

    dragstart:拖拽开始 drag: 拖拽中,会不停的触发 dragend:拖拽结束 ondraglevea:有元素离开了本元素 ondragenter:有元素进入了本元素 ondragover: ...

  7. [ 总结 ] nginx 编译参数中文详解

    贴出来,方便查找和学习. nginx 编译参数: --prefix=PATH    指向安装目录--sbin-path=PATH    指向(执行)程序文件--conf-path=PATH    指向 ...

  8. BZOJ 3098

    : Hash Killer II 时间限制: Sec 内存限制: MBSec Special Judge 提交: 解决: [提交][][] 题目描述 这天天气不错,hzhwcmhf神犇给VFleaKi ...

  9. Scanner类的个人分析

    Scanner类读取键盘输入(java中Scanner类nextLine()和next()的区别和使用方法&&java 中的Scanner(非常详细不看后悔)): 2017/3/18 ...

  10. Android 曲线动画animation,类似加入购物车动画

    按照惯例先放效果图:图中小球做抛物线运动 资源图片 1.首先布局文件activity_main.xml,布局很简单,就一个测试按钮 <RelativeLayout xmlns:android=& ...