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之美》

.NET框架中系列专业技术术语和缩写的更多相关文章

  1. Spring Security框架中踢人下线技术探索

    1.背景 在某次项目的开发中,使用到了Spring Security权限框架进行后端权限开发的权限校验,底层集成Spring Session组件,非常方便的集成Redis进行分布式Session的会话 ...

  2. spring框架中的aop技术

    1. 什么是AOP, 面向切面编程 AOP为Aspect Oriented Programming的缩写, 意为:面向切面编程,主要是使各部分之间的耦合度降低, 提高程序的可重用性, 同时提高了开发的 ...

  3. Spring框架中的AOP技术----配置文件方式

    1.AOP概述 AOP技术即Aspect Oriented Programming的缩写,译为面向切面编程.AOP是OOP的一种延续,利用AOP技术可以对业务逻辑的各个部分进行隔离,从使得业务逻辑各部 ...

  4. Spring框架中的AOP技术----注解方式

    利用AOP技术注解的方式对功能进行增强 CustomerDao接口 package com.alphajuns.demo1; public interface CustomerDao { public ...

  5. tp中使用分页技术

    1 public function showList() { $m_ld = D ( 'guangxi_ld' ); $page = I ( 'get.p', 1 ); // 在配置中获取分页值 $p ...

  6. spring+websocket综合(springMVC+spring+MyBatis这是SSM框架和websocket集成技术)

    java-websocket该建筑是easy.儿童无用的框架可以在这里下载主线和个人教学好java-websocket计划: Apach Tomcat 8.0.3+MyEclipse+maven+JD ...

  7. Spring框架学习05——AOP相关术语详解

    1.Spring AOP 的基本概述 AOP(Aspect Oriented Programing)面向切面编程,AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查 ...

  8. AF(操作者框架)系列(2)-在Actor框架中派生Actor核心(命令模式)

    为了能够提高程序的复用性,我们准备用Actor Framework框架,来演示其满足了这个需求(本章及后面的内容,需要有OOP的基础知识). 首先,简述一下ActorFramework的运行过程: 在 ...

  9. AF(操作者框架)系列(1)-LabVIEW中的模块化应用概述

    一.引子 在前面对LabVIEW介绍的文章中,关于框架开发的内容涉及很少.为了讲解操作者框架(Actor Framework)的优缺点,也只是拿出来QDSM(Queue-Driven State Ma ...

随机推荐

  1. 【codeforces 765B】Code obfuscation

    [题目链接]:http://codeforces.com/contest/765/problem/B [题意] 让你把每个变量都依次替换成a,b,c,-.d这些字母; 且要按顺序先用a再用b-.c.d ...

  2. 一起学Python: 多线程-共享全局变量问题

    多线程-共享全局变量问题 多线程开发可能遇到的问题 假设两个线程t1和t2都要对全局变量g_num(默认是0)进行加1运算,t1和t2都各对g_num加10次,g_num的最终的结果应该为20. 但是 ...

  3. HDU 3605Escape(缩点+网络流之最大流)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3605 本来打算昨天写两道题的,结果这个题卡住了,最后才发现是最后的推断条件出错了,推断满流的条件应该是 ...

  4. Android studio怎么创建Android虚拟机?

    进行Android studio中进行开发app应用的情况,如果在进行调式app的应用的情况下,没有真机手机机器是没有办法调式的,那么只能通过Android studio中sdk提供虚拟机进行调式ap ...

  5. 利用WPF建立自己的3d gis软件(非axhost方式)(十)SDK中一些自带的展示面板应用

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十)SDK中一些自带的展示面板应用 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV ...

  6. HSQL一个简短的引论

    前言     在对dao层写測试类的时候,我们须要一个測试数据库,一般我们会是专门建立一个真实的測试数据库,可是有了HSQLDB事情就变得简单了起来. 正题 一.简单介绍: hsql数据库是一款纯Ja ...

  7. hudson绑定svn和vs2008实现持续构建

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先需要在服务器上安装以下工具: (1)hudson,我推荐从http://hudson-ci.org/downloa ...

  8. ssh探头安全

    1.  ssh 合约                 SSH 为建立在应用层和传输层基础上的安全协议. SSH 是眼下较可靠,专为远程登录会话和其它网络服务提供安全性的协议.利用 SSH 协议能够有效 ...

  9. linux每个路由表的系统研究

        linux那里0~255干脆256张路由表.间0这并不表示unspec(未指定),253.254,255分别default.main.local表. 除了以上4张表外的其它表都是留给用户指定的 ...

  10. Linux下编译,要下载tar.xz,而不要下载zip,因为换行的编码不一样,对.h.cpp没有影响,但是对脚本有影响 good

    原因是 在win下编辑的时候,换行结尾是\n\r , 而在linux下 是\n,所以才会有 多出来的\r但是这个我是直接下载的官网文件解压的,没有动过啊. 破案了. linux下编译要下 .tar.x ...