目录
1.1 在.NET之前
1.1.1 20世纪90年代末的Windows编程
1.1.2 下一代平台服务的目标
1.2 .NET时代
1.2.1.NET框架的组成
1.2.2 大大改进编程环境
1.面前对象开发环境
2.自动垃圾回收
3.互操作性
4.不需要COM
5.简化的部署
6.类型安全性
7.基类库
1.3 编译成CIL
1,4 编译成本机代码并执行
编译和执行
1.5 CIR
1.6 CLI
CLI的重要组成部分
1.公共类型系统:
2.公共语言规范:
1.7 各种缩写
1.8 C#的演化
C#编程语言是在为微软公司的.NET框架上开发程序而设计的。本篇文章将简要介绍.NET从何而来,以及他的基本架构。
20世纪90年代末,使用微软平台的Windows编程分化成许多分支。大多数程序员使用VisualBasic(VB)、C、C++。和一些C和C++程序员在使用纯Win32 API,但是大多数人在使用MFC(Microsoft Foundation Class,微软基础类库)。其他人已经转向了COM(Component Object Model,组件对象模型.
所有这些技术都有自己的问题。纯Win23 API不是面向对象的,而且使用它的工作量比使用MFC更大。MFC是面向对象的,但是它却不一致,并逐渐变得陈旧。COM虽然概念简单,但是他的实际代码复杂,并且需要很多丑陋的、不雅的底层代基础代码。
所有这些编程技术还有一个缺点是他们主要针对桌面程序而不是Internet进行开发。那时Web编程还是以后的事情,而且看起来和桌面编程非不同。
我们真正需要的是一个新的开始-------一个集成的,面向对象的开发框架,他可以吧一致和优雅带回编程。为满足这个需求,微软打算开发一个代码执行环境和一个可以实现这些目标的代码开发环境。这些目标列在下图
2002年,微软发布了.NET框架的第一个版本,声称其解决了旧问题并实现了下一代系统的目标。.NET框架是一种比MFC和COM编程技术更一致并且面向对象的环境。他的特点包括以下几点
.NET框架由三部分组成,如图。执行环境成为CLR(Common Language Runtime,公共语言运行库)。CLR在运行时管理程序的执行,包括以下内容。
编程工具涵盖了编码和调试需要的一切,包括以下几点。
BCL(Base Class Library,基类库) 是.NET框架使用的一个大的类库,而且也可以在你的程序中使用。
较之前的Windows编程环境,.NET框架为程序员带来了相当大的改进。下面几节将简要阐述他之前的特点以及其带来的好处;
CLR、BCL和c#完全是面向对象的在,并形成了良好的集成环境。
系统为本体程序和分布式系统都提供了一致的、面向对象的编程模型。它还为了桌面应用程序、移动应用程序和Web开发提供了软件开发接口,涉及的目标范围很广泛,从桌面服务器到手机。
CLR有一项服务称为GC(Garbage Collector,垃圾收集器),它能为你自动管理内存。
GC自动从内存中删除程序不在访问的对象。
GC使得程序员不在操心许多以前必须执行的任务,比如释放内存和检查内存泄漏。这可是个很大的改进,因为检查内存泄漏可能非常困难且耗时。
.NET框架专门考虑了不同的.NET语言、操作系统或Win32DLL和COM之间的互操作性。
.NET语言的互操作性允许用不同的.NET语言编写的软件模块无缝地交互。
.NET框架使程序员摆脱了COM的束缚,作为一个C#程序员,你肯定不需要使用COM编程环境,因而也不需要下面这些内容。
尽管现在不太需要编写COM代码了,但是系统中还是有很多COM组件,C#程序员有时候需要编写代码来和那些组件进行交互。c#4.0引入几个新特性,来简化这个工作,我们将在后面讨论;
为.NET框架编写的程序进行部署比以前容易得多,原因如下
CLR检查并确保参数及其他数据对象的类型安全,不同编程语言编写的组件之间也没有问题
.NET框架提供了一个庞大的基类库,很自然地,他被称为基类库(Base Class Library BCL)。
(有时候称为框架类库--------Framework Class Library,FCL。)在写自己的程序时,可以使用其中的类,如下所示。
.NET语言的编译器接受源代码文件,并生成名为程序集的输出文件如下图
程序CIL直到它被调用运行时才会被编译成本机代码。在运行时,CLR执行下面的步骤(如下图):
程序集中的可执行代码只需要的时候由JIT编译器编译,然后他就被缓存起来以备再后来的程序中执行。使用这个方法意味着不会编译成本机代码,而且被调用的代码只被编译一次。
一旦编译为本机代码,CIL就在运行时管理它,执行像释放无主内存、检查数组边界。检查参数类型和管理异常之类的任务。有两个重要的术语由此而生;
微软公司还提供了一个称为本机映像生成器的工具Ngen,可以把一个程序集转换成当前处理器的本机代码。经过Ngen处理过的代码免除了运行时的JIT编译过程。
无论原始源文件的文件语言是什么,都遵循同样的编译和执行过程,如下图用三种语言编写的程序的完整编译时和运行时过程。
.NET框架的核心组件是CLR,他在操作系统的顶层,负责管理程序的执行,如图1-6所示CLR还提供下列服务:
每种编程语言都有一组内置的类型,用来表示如整数、浮点数和字符串之类的对象。过去,这些类型的特征因编程语言和平台的不同而不同。列如,数组组成整数的位数对于不同的语言和平台就有很大差别。
然而,这种统一性的缺乏使我们难以使用不同的语言编写的程序及库一起良好协作。为了有框架的组件连接成一个内聚的、一致的系统。他展示了系统的概念和架构,并详细说明了所有软件必须坚持的规则和约定。CLI的组成如下图1-7所示
CLI和C#都已经被Ecma International批准未开放的国际标准规范。【Ecma本来是Europen Computer Manufacturer Association(欧洲计算机制造商协会)的缩写】,但是现在已经不是缩写了,它是一种符号,Ecma成员包扩微软、IBM、惠普、Adode等众多和计算机消费性电子产品有关的公司。
虽然大多数程序员不需要了解CLI规范细节,但是至少应该熟悉公共类型系统和公共语言规范的含义和用途;
CTS(Common Type System,公共类型系统)定义了那些在托管代码中一定会使用的类型的特征。CTS的一些重要方面如下:
本篇文章包含了许多.NET缩写,图1-8将帮助你直管地理解他们。
c#的最新版本为5.0。每个新版本在新添加的特性都有一个焦点特性。5.0的焦点特性是异步编程,将在后续文章展开介绍。