在.net之前微软发布的多种技术中,每一种抽象技术的宗旨都是使开发人员更容易将精力集中到一种特定的开发情形中,虽然这些抽象技术的目的是为我们提供帮助,但是仍然要求开发人员学习大量的知识,而且这些抽象技术并不是一开始便设计成相互协作的,因此还要解决集成问题。
.net Framework的目标就是解决这些问题,它的目的不是为构建一种特定类型的应用程序的开发人员提供一个抽象技术。它的目标是为平台或Windows操作系统本身提供一个抽象技术。.net将为所有类型的应用程序提升了抽象等级。这意味着开发人员只需学习和掌握一个编程模型和一套API,不管是用它们来构建控制台应用程序、图形应用程序、网站、还是构建其它应用程序使用的组件。它允许开发人员使用自己选择的语言来工作。
.net framework由两部分组成:公共语言运行库(CLR)和Framework类库(FCL)。CLR提供了所有类型的应用程序都要使用的编程模型。CLR包括它自己的文件加载器、内存管理器、安全系统、线程池等。它还提供了一个面向对象的编程模型,定义了类型和对象是什么,以及它们的行为方式。Framework类库提供了所有应用程序都要使用的一个面向对象的API集合。
.net主要提供的改善主要有以下内容:
一致的编程模型:以前部分操作系统功能用dll函数访问,部分功能通过com访问。现在,所有的应用程序服务都通过一个通用的、面向对象的编程模型来提供。
简化的编程模型:CLR避免了一下任何概念:注册表、GUID、IUnknown、Addref、Release、HRESULT等。CLR并非是将这些概念从开发人员那里抽象出来,而是彻底不存在。
一次运行,一直能运行:在之前开发时,会有“Dll hell"这个版本控制问题。为一个新应用程序安装的组件覆盖了旧应用程序的组件,就可能发生Dll hell。现在,.net构架将应用程序组件完全隔离开,使应用程序总是加载当初生成和测试时使用的那些组件。如果一个应用程序在安装好之后能够运行,那么以后总能运行,不会发生其组件被其它应用程序组件替换的问题。
简化的部署:对于目前的Windows应用程序来说,它们的安装和部署实际并不方便。我们必须创建相应的文件、注册表设置和快捷方式。.net彻底解决了这个问题。.net组件不再通过注册表来引用。安装大多数.net应用程序是,只需将文件复制到一个目录,然后在"开始"菜单、桌面或者"快速启动"工具栏上添加一个快捷方式。卸载时,直接删除文件即可。
广泛的平台支持:.net编译源代码时,生成的是IL代码。而不是传统的CPU指令。在运行时,CLR会将CIL转换成本地CPU指令。由于向本地CPU指令的转换是在运行时完成的,所以这个转换是完全针对主机CPU进行的。我们可以在任何机器上部署.net应用程序,只要这些机器上正在运行符合ECMA标准的CLR和FCL版本。
编程语言集成:COM允许不同的编程语言进行互操作。而.net则允许语言相互集成。这样,就可以自由使用其它语言的类型,感觉它们就像是我们自己的类型。
自动内存管理(垃圾收集):在对资源进行管理时,如果忘记释放某个资源,最终会造成应用程序在无法预料的时间产生错误的行为。CLR能自动跟踪资源使用,保证应用程序永远不会造成内存泄露。
类型安全验证:CLR可以验证我们编写的所有代码都是类型安全的。类型安全性确保总是采取一致的方式来访问已分配的对象。
一致的方法出错行为:在以前进行Windows编程时,函数往往采取不一致的格式来报告错误。有的函数返回的是Win32状态码,有的函数返回的是HRESULT,有的函数则抛出异常。在CLR中,所有错误都是通过异常来报告的。使用异常,开发人员可以将错误恢复代码与负责实际工作的代码隔离开。异常在工作时是跨越模块和语言边界的。有别于状态码和HRESULT,异常是无法忽略的。
安全性:传统的操作系统安全性允许根据用户账户来提供隔离和访问控制。它假定所有代码都得到了同等的信任。但是,随着人们越来越多的依赖移动代码,我们需要采取一种进一步以代码为中心的方式来控制应用程序的行为。代码访问安全性(code access security)为此提供了一个解决方案。
互操作性:.net全面支持开发人员访问现有的COM组件,并调用现有的DLL中的Win32函数。