CIL (Common Intermediate Language) 公共中间语言

CIL最初是随着.NET由微软一起发布的,之前也叫MSIL(Microsoft Intermediate Language),后来进行了标准化被称作CIL,也会简写为IL

CBL (Base Class Library) 基类库

包含的都是最基本的类型,其本身已经与CIL语言融为一体,为CIL语言提供基础的编程支持。
该类库已经成为了CLI标准的一部分
 FCL的一个子集

FCL (Framework Class Library) 框架类库

最内一层:由BCL的大部分组成,主要作用是对.NET框架,.NET运行时及CIL语言本身进行支持,例如基元类型,集合类型,线程处理,应用程序域,运行时,安全性,互操作等。
中间一层:包含了对操作系统功能的封装,例如文件系统,网络连接,图形图像,XML操作等。
最外一层:包含各种类型的应用程序,例如Windows Forms, Asp.NET , WPF, WCF , WF等。

CTS (Common Type System) 公共类型系统

如果要开发一套新语言,这种语言和C#或VB.NET一样,在编译后能生成CIL代码,也可以在.NET环境下运行。要开发的新语言相当于CIL的高级语言版本,所以
要做什么并不是由新语言决定的,而是由CIL来决定的。因此,需要一套CIL的定义,规则或标准。这套规则定义了我们的语言可以做什么,不可以做什么,具有
哪些特性。这套规则就称作CTS(Common Type System, 公共类型系统)。
     C#和VB.NET不过是微软自己开发的一套符合了CTS的语言,实际上还有很多的组织或团体,也开发了这样的语言,比如Delphi.NET , FORTRAN等。
     CTS规定了可以在语言中定义诸如类,结构,委托等类型,这些规定定义了语言中更高层次的内容,我们才可以去定义类类型(Class Type)或者结构类型(Struct Type)等。
     CTS规范了类型中可以包含字段(field),属性(property),方法(method),事件(event)等。
     CTS规定了各种访问属性,比如Private,Public,Family(C#中为Protected),Assembly(C#中为internal),Family and assembly(C#中没有提供实现),Family or assembly(C#中为protected internal)。
    CTS还定义了一些约束,例如,所以类型都隐式地继承自System.Object类型,所有类型都只能继承自一个基类。
  (众所周知,传统C++是可以继承自多个基类的。为了让熟悉C++语言的开发者也能在.NET框架上开发应用程序,微软推出了面向.NET的C++/CLI语言(也叫托管C++)),它就是符合CTS的C++
改版语言,为了满足CTS规范,它被限制了只能继承自一个基类。

特别说明:
      1》C#并没有提供Family and assembly的实现,C#中也没有全局方法(Global Method)。换言之,C#只实现了CTS的部分功能。也就是说CTS规范了语言能够实现的所有能力,但是符合CTS规范的具体语言不一定要实现CTS规范所定义的全部功能。
    2》C++/CLI又被约束为只能继承自一个基类,换言之,C++中的部分功能被删除了。就是说,任何语言要符合CTS,其中与CTS不兼容的部分都要被舍弃。

显然,由于CIL是.NET运行时所能理解的语言,因此它实现了CTS的全部功能。虽然它是一种低级语言,但是实际上,它所具有的功能更加完整。

CLS (Common Language Specification ) 公共语言规范

为了解决面向.NET的各个语言之间的相互引用,各个语言希望被引用的部分而要遵循的一套标准(语言特性)。 对于某个语言只要它公开的部分能够满足这些规范,就能被其他语言的程序集所引用。

tops:
语言特性:是否区分大小写,标识符的命名规则如何、可以使用的基本类型有哪些、构造函数的调用方式(是否会调用基类构造函数),支持的访问修饰符等。
.NET提供了一个特性CLSCompliant用于在编译时检测程序集是否符合CLS 类名加上特性[assembly:CLSCompliant(true)]

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

.NET框架核心 还有一种叫法,即VES(Virtual Execution System,虚拟执行系统)。CLR是.NET程序集的运行环境,有点类似Java虚拟机
由于CLR本身用于管理托管代码,因此它是由非托管代码编写的,并不是一个包含了托管代码的程序集,也不能使用IL DASM进行查看

CLI (Common Language Infrastructure) 公共语言基础

CLI是一个国际标准,由ECMA和ISO进行了标准化。它只是一个概念和汇总。
CLI包括:CIL,CTS,CLS,VES,元数据,基础框架。

TIPS: CLI是一个标准,而.NET框架是这个标准的具体实现。在CLI中,并没有CLR的概念,只有VES,而CLR就是.NET框架中VES的具体实现。
.NET框架是CLI标准在Windows平台上的具体实现。
Mono Project是CLI标准的另一个实现,Mono Project的目标就是将.NET框架多平台化

摘抄自张子阳《NET之美》

最新文章

  1. 【krpano】krpano xml资源解密(破解)软件说明与下载(v1.3)
  2. HTTP真的很简单
  3. Hbase预分区种子生成
  4. ubuntu mysql 远程连接
  5. 2.Could not open Selected VM debug port (8700). Make sure you do not have another instance of DDMS or of the eclipse plugin running
  6. 终于成功仿了一次Kalman滤波器
  7. java 回传参数
  8. VS2005工程增加SDK
  9. 深入解析Java对象的hashCode和hashCode在HashMap的底层数据结构的应用
  10. php 利用第三方软件进行网页快照
  11. WebView中的视频全屏的相关操作
  12. Java排序之排序大综合
  13. FineUI开源版之TreeGrid(修改)
  14. instanceof实例和prototype
  15. 得到Android keystore签名的命令方法
  16. Android 视频通信,低延时解决方案
  17. zcu102 hdmi example(一)
  18. idea导入maven项目 傻瓜都能看懂
  19. 解读JavaScript 之引擎、运行时和堆栈调用
  20. (链表 双指针) leetcode 141. Linked List Cycle

热门文章

  1. C#基础readonly 与const
  2. 从张量积(tensor product)到多重线性代数(multilinear algebra)
  3. CocoaPods详解之(三)----制作篇
  4. 学习鸟哥的Linux私房菜笔记(13)——用户管理
  5. Input ANR处理流程
  6. SVM明确的解释1__ 线性可分问题
  7. VS Code插件之Cordova Tools
  8. Android平台第三方应用分享到微信开发
  9. Jsp bug_001
  10. misc子系统