1.为了让开发人员把精力放在所要解决的问题上,不去关注太多的机器和OS级别的细节,MS提供了一些抽象技术。
- MFC 在GUI编程方面提供C++语言的抽象。
- ATL 在创建可供使用不同语言的程序员的组件方面提供抽象。
- ASP 在web 编程方面提供抽象。
这里存在一个问题,就是这些抽象技术本身在设计时没有考虑到在一起协同工作,他们都是特定于某一方面的:web applications, GUI, Components.等程序员需要把它们结合使用时,就得掌握不同的抽象技术,例如,如果想在 web application中使用component,就得同时掌握ASP和ATL技术,这样开发人员依然需要学习很多东西,从而面临一个集成的问题。
2..Net Framwork能解决1中的所有问题。.Net Framework提供的是对平台(Windows OS本身)的抽象技术,而不是为了产生新的应用程序类型而做的抽象。它提供统一的API集(通过FCL实现)和统一的编程Model(通过CLR实现)。程序员可以使用任何支持CLR的语言,编写各种类型的应用程序。.Net Framework通过FCL和CLR提供的优点:
- 统一的编程模型:提供统一的面向对象编程模型,不像之前的一些功能通过DLL函数提供,另一些通过COM objects提供。
- 简化了编程模型:程序员不需要理解:GUID,HRESUTLs, Release, IUnknown, AddRef等概念,除非编写需要和已存在code交互的.Net应用程序。
- 通过隔离应用程序组件解决了DLL hell问题。
- 简化了部署,之前的Windows应用程序在安装和部署时需要修改注册表,创建文件和快捷方式,比较麻烦和复杂,而且很难卸载干净。.Net Framework组件不需要通过注册表来引用,所以安装.Net Framework应用程序只需要copy文件和添加快捷方式,不需要操作注册表,从而卸载时只需要删除文件。
- 由于编译生成IL,在运行时,才转成针对特定CPU的本地代码,所以具有广泛的平台支持性。
- 编程语言集成,通过CTS使得可以编写继承VB类的C++类。
- 简化了代码重用。
- 自动的内存管理。
- 类型安全验证:防止缓冲区溢出和越界,保证程序执行流只能从正常的函数入口点进入,从而减少编程错误和安全攻击。
- 丰富的Debug支持。
- 一致的函数失败模式:.Net Framework采用Exception的方法报告异常,较之返回status code或HRESULTs有可以跨越模块和编程语言的边界,不可被忽略的特点。此外,Exception使得程序员可以把失败回复代码和工作代码隔离开来,这种隔离简化了代码的写,读和管理,它还包含详细的堆栈和错误信息便于查错。
- 安全:提供基于代码的安全,较之以前的基于account来进行隔离和access control的方式,粒度更细,也更安全。
- 互操作:.Net Framework完全支持对已经存在的Windows 32函数或COM组件的访问。