您的位置:首页 > 其它

.NET体系

2019-07-20 17:05 34 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_24025219/article/details/96604173

.NET体系结构

1. 本文主要介绍
公共语言运行库(CLR)、公共类型系统(CTS)、公共语言规范(CLS)、中间语言(IL)、框架类库(FCL)、基础类库(BCL)、即时编译(JIT)和预编译,以及动态语言运行时(DLR),从底层进行详细地解析。
2. 公共语言运行时
公共语言运行时(Common Language Runtime,CLR)为.NET Framework提供了托管运行环境,它负责运行托管代码,进行安全检查,垃圾回收等。
基于CLR的语言编译器开发的代码称为托管代码。托管代码具有许多优点,例如跨语言集成、跨语言异常处理、增强的安全性、版本控制和部署支持、简化的组件交互模型、调试和分析服务等。
1.2公共类型系统
众所周知,每一种编程语言都有自己的类型系统,但稍微接触过不同语言的读者都会发现,各种语言的类型系统都有许多相同或相似的地方。.NET利用各种语言相近的特性抽象出完整的一套公共类型系统(CTS),使所有类型独立于编写它们的源代码语言。CTS构成了.NET框架的公共语言运行时的基础,其中最重要的体现就是.NET平台的多语言支持,而运行于.NET平台的每一种语言又为了维护自己的语法特色,便使用别名来代替.NET的基础数据类型。CTS的引入解决了许多由多语言协作开发各个模块所带来的问题。
1.2.1 CTS基本结构
CTS不仅定义了所有的数据类型,并提供了面向对象的模型以及各种语言需要遵守的标准。CTS可以分为两个大类:值类型和引用类型,同时这两种类型之间还可以进行强制转换,从值类型到引用类型的转换称为Boxing(装箱),从引用类型到值类型的转换称为UnBoxing(拆箱)。
CTS的基本结构如图所示,CTS的每一种类型都是对象,并继承自一个基类System.Object。

1. 值类型和引用类型
值类型(Value Type)直接包含它们的数据,值类型的实例分配在堆栈。由上图可知,值类型主要包括简单类型、结构体类型和枚举类型等。
引用类型(Reference Type)的实例分配在托管堆(Managed Heap)上,变量保存了实例数据的内存引用。由图1-1可知,引用类型可以是自描述类型、指针类型或接口类型。而自描述类型可以进一步细分成数组和类类型。类的类型则可以是用户定义的类、装箱的值类型和委托。
2. 装箱和拆箱
上文已经提到,所谓“装箱”就是将值类型转换为引用类型,所谓“拆箱”就是将被装箱而成的引用类型转换为原来的值类型

  1. CLR集成了很多种语言,并让它们之间可以相互访问,这是因为CLR建立了标准的类型集、元数据、公共执行环境。但由于各种语言间存在着极大的差别(如区分大小写,有的不支持unsigned、操作符重载或者参数可变的方法),所以要想创建这种让别的语言都能访问的程序,自己所用的编程语言只能使用其他语言都支持的那些特性。为了帮助我们更好地做到这一点,Microsoft定义了一个“公共语言规范”(Common
    Language Specification,CLS)。
    CLS定义了CTS的子集,通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性。CLS还建立了CLS遵从性要求,这帮助你确定你的托管代码是否符合CLS以及一个给定的工具对托管代码(该代码是使用CLS功能的)开发的支持程度。
     如果你的组件在对其他代码(包括派生类)公开的API中只使用了 CLS功能,那么可以保证在任何支持 CLS的编程语言中都可以访问该组件。遵守CLS规则、仅使用CLS所包含功能的组件叫做符合 CLS的组件。
    如图1-2所示,CLR/CTS提供了一个组特性,一些语言会提供这些特性的一个较大子集(IL提供全部特性)。而CLS是每种语言必须支持的一个最小特性集合。

1.2.2
公共语言规范
CLR集成了很多种语言,并让它们之间可以相互访问,这是因为CLR建立了标准的类型集、元数据、公共执行环境。但由于各种语言间存在着极大的差别(如区分大小写,有的不支持unsigned、操作符重载或者参数可变的方法),所以要想创建这种让别的语言都能访问的程序,自己所用的编程语言只能使用其他语言都支持的那些特性。为了帮助我们更好地做到这一点,Microsoft定义了一个“公共语言规范”(Common
Language Specification,CLS)。
CLS定义了CTS的子集,通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性。CLS还建立了CLS遵从性要求,这帮助你确定你的托管代码是否符合CLS以及一个给定的工具对托管代码(该代码是使用CLS功能的)开发的支持程度。
 如果你的组件在对其他代码(包括派生类)公开的API中只使用了 CLS功能,那么可以保证在任何支持 CLS的编程语言中都可以访问该组件。遵守CLS规则、仅使用CLS所包含功能的组件叫做符合 CLS的组件。
如图,CLR/CTS提供了一个组特性,一些语言会提供这些特性的一个较大子集(IL提供全部特性)。而CLS是每种语言必须支持的一个最小特性集合。

如果一种语言定义了一个类型,并希望在另一种语言中使用该类型,就绝对不能在该类型的公共和受保护的成员中使用CLS外部的任何特性。否则其他编程人员使用其他语言来编写代码时,就可能无法访问该类型的成员。代码清单1-3简单地演示了遵从CLS兼容性的代码编写

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: