.NET平台构造块(CLR、CTS和CLS)及基础类库

  • 一、简介

          程序员可能经常在.NET平台上开发应用程序,但却不一定都了解使.NET成为现实的3个关键(而且相互关联的)实体:CLR、CTS和CLS。从程序员的角度看,.NET可以理解为一个运行时环境和一个全面的基础类库。如图1所示,可以从宏观上看到CLR、CTS、CLS和基础类库之间的关系。

    图1 CLR、CTS、CLS和基础类库之间的关系


          运行时环境的正式名称是CLR(Common Language Runtime,公共语言运行时)。其主要作用是为我们定位、加载和管理.NET类型,同时也负责一些低层细节的工作,如内存管理、应用托管、处理线程、安全检查等。在运行时,CLR根本不关心开发人员用哪一种语言写源代码。这意味着在选择编程语言时,应选择最容易表达自己意图的语言。可用任何编程语言开发代码,只要编译器是面向CLR的。

          .NET平台的另一个构造块是CTS(Common System,通用类型系统)。CTS规范完整描述了运行库所支持的所有可能的数据类型和编程结构,指定了这些实体间如何交互,也规定了它们在.NET元数据格式中的表示。

          但是,一种特定的支持.NET的语言可能不支持CTS所定义的所有特性,因此出现了CLS(Common Language Specification,公共语言规范)。CLS是一个相关的规范,定义了一个让所有.NET语言都支持的公共类型和编程结构的子集。这样,如果构造的.NET类型仅公开与CLS兼容的特性,那么可以肯定其他所有支持.NET的语言都能使用它们。反之,如果使用了与CLS不兼容的数据类型或编程结构,就不能保证所有的.NET语言能和你的.NET代码库交互。


  • 二、基础类库的作用

          除了CLR和CTS/CLS规范之外,.NET平台提供了一个适用于全部.NET程序语言的基础类库(BCL)。这个基础类库不仅封装了各种基本类型,如线程、文件输入/输出(I/O)、图形绘制以及与各种外部硬件设备的交互,还支持在实际应用中用到的一些服务。

          例如,基础类库定义了一些可创建任意类型软件应用程序的类型,例如,使用ASP.NET创建Web站点,使用WCF创建网络服务,使用WPF创建桌面GUI应用程序,等等。基础类库还定义了另外一些类型,可以与特定计算机上的XML文档、本地目录和文件系统互动,通过ADO.NET与关系数据库交流,等等。


  • 三、CLR(公共语言运行时)

          从编程角度来说,运行时环境(runtime)可以理解为执行给定编译代码单元所需的外部服务的集合。比如,当Java程序员向一台新电脑部署软件时,要确保软件运行,电脑上就要安装JVM(Java Virtual Machine,Java虚拟机)。

          NET平台提供了另一种运行时环境。.NET运行库与刚才提到的其他运行库的关键不同在于,.NET运行时环境提供了一个定义明确的运行时层,可以被支持.NET的所有语言和平台所共享。

          CLR中最重要的部分是由名为mscoree.dll的库(又称公共对象运行时执行引擎)物理表示的。当用户程序引用一个程序集,要使用它时,mscoree.dll将首先自动加载,然后由它负责将需要的程序集导入内存。运行时引擎负责许多任务,首要的任务是负责解析程序集的位置,并通过读取其中包含的元数据,在二进制文件中发现所请求的类型。接着,CLR在内存中为类型布局,将关联的CIL编译成特定平台的指令,执行所有需要的安全检查,然后运行当前的代码。

          除了导入自定义的程序集和建立自定义的类型,必要时CLR也会与包含在.NET基础类库的类型交互。虽然完整的基础类库被分为若干分离的程序集,但最重要的程序集是mscorlib.dll。mscorlib.dll包含大量核心类型,它们封装了各种常见的编程任务与.NET语言用到的核心数据类型。当建立一个.NET解决方案时,你可以自动访问这些程序集。

          图2说明了发生在源代码(它使用了许多基础类库类型)、.NET编译器和.NET执行引擎之间的工作流。

    图2 mscoree.dll工作流


  • 四、CTS(通用类型系统)

          CLR一切都围绕类型展开,类型向应用程序和其他类型公开了功能。通过类型,用一种编程语言写的代码能与用另一种编程语言写的代码沟通。由于类型是CLR的根本,所以Microsoft制定了一个正式的规范来描述类型的定义和行为,这就是"通用类型系统"(Common Type System,CTS)。

          一个给定的程序集可能包含任意数量的不同"类型"。在.NET领域,类型(type)是一个一般性的术语,它指的是集合{类,接口,结构,枚举,委托}里的任意一个成员。当用支持.NET的语言构建解决方案时,很有可能要与这些类型打交道。例如,程序集可能定义了一个类,它又实现了一些接口。或许其中某个接口方法采用枚举类型作为输入参数,而在调用时返回一个结构。

          CTS(通用类型系统)是一个正式的规范。它规定了类型必须如何定义才能被CLR承载。通常,只有那些创建针对NET平台的工具或编译器的人才对CTS的内部工作非常关心。但是,对于所有.NET编程人员来说,学习如何在自己使用的语言中使用由CTS定义的5种类型,是非常重要的。

          CTS规范规定,一个类型可以包含零个或者多个成员。这些成员可以为如下的类型:

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值