日期:2009-01-22  浏览次数:20452 次

类库主要的好处是它们将核心Win32 API的最常用的功能和外挂SDK的功能封装到了一个统一的包中。采用清晰而有条理的方式对类库进行了分组和描述,这样开发者能更容易地找到他们的应用程序所需的大多数功能。


相反,在过去几年中,新功能要么被“绑缚”到Win32 API上,要由通过独立的API(例如用于图形的Directx,或者用于XML和SOAP的不同的SDK)来提供。对它们唯一能做的逻辑分组就是按照字母顺序进行排序。结果,使用Win32 API和各种SDK经常使人晕头转向,而开发者必须判断几个类似的API中哪一个最适合他们特定的要求。



支持Web Services

CLR和类库的结合使得与以前只是在Windows上相比,开发Web Services更为容易。

首先,CLR为运行服务器应用程序,包括Web Services,提供了一个更可靠的基础。服务器应用程序通常比桌面应用程序要有更高的可用性和安全性的要求,因此它们尤其将从CLR捕捉错误和阻止恶性代码的功能中受益。此外,服务器应用程序通常需要长时间不间断地运行,因此也将从CLR的碎片整理功能中受益。碎片整理功能可以限制内存泄露,否则长时间运行的应用程序可能会耗尽所有可用的内存。



混合可控制代码和不可控制代码



Common Language Runtime(CLR)(通用语言运行环境)的协作功能允许开发者将可控制代码与COM组件中现有的不可控制代码(以及Win32动态连接库(DLL)中的代码)混合起来。

当一可控制代码组件调用一COM组件(顶层)时,CLR就生成一个运行环境可调用包装(runtime callable wrapper)(RCW)。RCW充当不可控制的COM组件的代理(或中介)的角色。RCW处理可控制组件和COM组件之间所有的交互,包括(但不限于)以下内容:

·在CLR和COM环境间翻译和传递数据

·当可控制代码组件被CLR碎片整理进程重新声明时,释放包装的 COM组件的内存和其他资源。

·将来自COM错误返回代码(HRESULT值)的错误翻译成CLR错误(称作异常)。

当COM组件调用用可控制代码(底层)写的 .NET组件时,CLR又生成了一个称作COM 可调用包装(CCW)的包。和RCW类似,CCW也在不可控制的COM代码和可控制代码之间充当代理或中介的角色。CCW还实现了COM组件所需功能的标准设置,这样可控制代码组件看起来就像标准的COM组件一样。

CCW处理不可控制的COM对象和可控制的.NET组件之间的所有支互,包括(但不限于)以下内容。

·在两种环境间移动和翻译数据

·当COM组件被释放时,由CLR释放用于最后的碎片整理的可控制代码。

·将CLR异常翻译为COM返回代码。



其次,类库提供了开发者创建Web Services或使用Web Services的应用程序所需的全部代码。特别地,它们提供了在应用程序数据和XML间进行翻译转换的代码,以及通过Internet协议收发SOAP消息的代码。这样开发者就可将更多的精力放在他们自己的应用程序的逻辑上,而尽量不去考虑如何实现网络协议或读写XML数据这样的细节上。



统一平台:

CLR和类库还联合解决了微软当前平台存在的一个重要问题:所有的编程语言并非是均衡创建的。微软的每种编程语言都有自己的run-time基础结构(例如,Visual Basic [VB] runtime的多个潜在冲突的版本)和软件库(例如Microsoft C++基础类)。这就要求微软维护这些库以及相关的诸如debugger和wizard等工具。一个组织通常不得不将一个项目分割开来,其中一些让C++程序员编写,另外一些则让VB程序员来写。任一种程序员的短缺都会影响进度。

.NET Framework采用以下两种方法来解决语言的划分问题。

标准化数据类型。首先,.NET Framework为最常用的数据类型(例如整数、实数、文本字符)提供了标准的内部描述和运算,并提供了将这些类型向所有的.NET语言和CLR扩展的机制。设立这种标准化数据类型和可扩展模型(全称为.NET Framework Common Type System (CTS)),消除了每种语言用它自己唯一且不兼容的方法实现数据类型的必要。

标准化应用程序格式。其次,.NET Framework实现了一个标准的应用程序格式——拥有自己的MSIL、元数据和清单的汇编。所有.NET语言的编译器都生成这种格式。通过从元数据中提取有关MSIL的信息,编译器、调试器和协议器等工具可以分析处理任何一种源程序设计语言的数据。

标准化的数据类型和应用程序格式使开发者可以创建用任一种理解其中的数据类型和格式的程序设计语言工作的类库,这样的类库包含所有微软的.NET编程语言以及众多的第三方厂商语言。特别地,.NET Framework类库仅使用CTS数据类型,并分配以标准的应用程序格式。结果,这些类库能被使用任何一种.NET编程语言的应用程序所使用。

(请参看“开发可控制代码”示意图。)

CLR和类库相结合为微软提供了一个单一的运行平台,它支持运行所有的编程语言,并且可以用一组公共的开发工具来实现它。微软已经发布了一个该平台和它所使用的语言的规范。(请参看“ECMA标准和Windows Lock-In。)此外,类库向所有的.NET编程语言提供了大致相同的基本功能组,这样就使程序员可以用任一种他们最拿手的语言来工作。



.NET类库域名空间



.NET开发平台提供的API 被组织安排到了一组带有逻辑名的分级域名空间中。(本示意图显示了几个比较重要的类。)这和Win32 API形成了尖锐对比,Win32 API只是一个简单的功能名的长列表,顶多可以按字母排序。有了分级制度以后开发者就可以更加快捷地定位所需的功能,而且添加新的API也不会与已有的发生冲突。

类建立在基础类(底层)之上,基础类具有下述能力:文本处理(System.Text)网络访问(System .NET),以及存储列表和其他数据集(System .Collections)等。

基础类之上是更复杂的类,例如数据访问(System .Data),它包括ADD.NET和XML处理(System .XML)。

顶层是用户接口库。Windows 表单和Drawing库(分别是System.Win表单和System .Drawing)提供了封装后的Windows用户接口,包括GDI+和DirectX .System。Web包含用于建立包括Web Services类和Web 表单用户接口类的ASP.NET应用程序的类库。



开发可控制代码



开发者通过将他们自己的应用程序源代码和来自.NET类库的代码相结合,创建了可控制代码。这些类库可能包括.NET开发平台包含的类库(例如ADO.NET和Windows 表单),以及来自第三方的类库。

接下来.NET编译器将此代码从人可读的格式翻译成Microsoft Intermediate Language (MSIL)。不管采用何种语言,所有的.NET开发平台编译器均生成MSIL结果。

除了MSIL,.NET编译器还产生元数据,它描述了弥补代码的组件。Common Language Runtime (CLR)(通用语言运行环境)使用这种元数据来增强安全性,并确保获得它所需的任何组件的正确版本(减少组件冲突,或者“DLL Hell”)。

Visual Studio .NET和其他工具自动将MSIL代码封装到CLR中使用的汇编中。几个MSIL文件可以被组合成一个单一的汇编。(有关一个汇编如何由CLR来执行的图解概貌,请参看“执行可控制代码”示意图。)



6.NET开发平台与J2EE的比较

作为彼此竞争的应用程序平台,微软 的.NET开发平台和Sun 的Java 2 Enterprise Edition(J2EE)(Java 2企业版)在意图和体系上极其相似,但在底层实现上却完全不同。



类似的目标 :