.NET Framework是一种编程环境的常用名称,其规范的叫法为通用语言基础架构(Common Language Infrastructure,CLI)。CLI是微软开发的并且通过了ISO和ECMA的认证标准。ISO和ECMA都是国际标准化机构。
.NET Framework引人注目的地方之一,就是支持多种编程语言。实际上,最新的统计结果表明,有超过30种语言可以使用.NET Framework,包括Visual Basic、C#和C++。这就意味着,如果习惯于使用Visual Basic,可以继续用这种语言编程。如果你是一名C++程序员,也不必为了充分利用.NET Framework所提供的优势而去学习一种新的语言。
但是,多语言支持并不是.NET Framework的唯一特性。它还提供了一整套技术,使软件开发更迅速且应用程序更加健壮和安全。多年来,.NET Framework成为首选的技术,因为它具有以下优点。
.NET Framework不像传统的编程环境。在传统的编程中,源代码要编译成可执行代码。这个可执行代码对于目标平台来说是本地的,因为它只能在原计划运行的平台上运行。换句话说,在Windows上编写和编译的代码,只能在Windows上运行;在Linux上编写的代码,只能在Linux上运行,依次类推,如图I-1所示。
图I-1 传统的编程范式
相反,.NET Framework程序则编译成通用中间语言(Common Intermediate Language,CIL,读作“sil”或“kil”)代码。如果你熟悉Java,CIL代码相当于Java的字节码。CIL代码此前叫作微软中间语言(Microsoft Intermediate Language)或MSIL代码,只能运行在公共语言运行时(Common Language Runtime,CLR)上。CLR是解释CIL代码的一个本地应用程序。因为CLR可用于多个平台,同样的CIL代码也变成了跨平台的代码。如图I-2所示,我们可以用支持的任何语言编写一个.NET程序并且把它编译成CIL代码。同样CIL代码可以运行在任意已经开发了CLR的操作系统上。除了CIL代码以外,.NET编译器还生成了元数据以描述CIL代码中的类型。这个元数据在术语上叫作清单(manifest)。把CIL代码和相应的清单一起打包成一个.dll或.exe文件,叫作程序集。
图I-2 .NET编程模型
目前,微软提供了CLR针对Windows的实现,但是随着来自Project Mono( http://www.mono-project.com )和DotGNU Portable.NET( http://dotgnu.org/pnet.html )的其他实现,CIL代码已经能够在Linux、Mac OS X、BSD、Sony PlayStation 3和Apple iPhone上运行了。
.NET术语中把只能在CLR之上运行的代码称为托管代码(Managed code)。另一方面,一些.NET语言,诸如C#和C++,既可以生成托管代码又可以生成非托管代码。非托管代码运行在运行时之外。本书只介绍托管代码。
当用C#或其他.NET语言编程时,我们总是使用通用类型系统(Common Type System,CTS)来工作。在解释CTS前,我们要确定你已经了解了什么是类型。那么,什么是类型呢?在计算机编程中,类型决定了值的种类,例如一个数字或一段文本。对于编译器来说,类型信息特别有用。例如,它使得的3*2这个乘法运算有意义,因为3和2都是数字。但是,我们如果在C#代码中写下VB *C#,编译器将认为它无效,因为不能把两段文本相乘,至少,在C#中不允许这样做。
CTS中有5种类型。
在本书中,我们会逐一介绍这些类型。