第 1 章 .NET Framework 2.0简介
图 1-5 Windows窗体组成
在学习Windows窗体应用程序之前,首先需要知道什么是窗体?窗体是一小块屏幕区域,
通常为矩形,可用来向用户显示信息并接受用户的输入。窗体可以是标准窗口、多文档界面窗口、对话框或图形化例程的显示表面。定义窗体用户界面的最简单方法是将控件拖放在其表面上。通过设置窗体的属性以及编写响应其事件的代码,可自定义该对象以满足应用程序的要求。图 1-5演示了窗体的组成。
与.NET Framework中的所有对象一样,窗体是类的实例。用Windows窗体设计器创建的窗体是类,当在运行时显示窗体的实例时,此类是用来创建窗体的模板。.NET Framework还使您得以从现有窗体继承,以便添加功能或修改现有行为。当向项目添加窗体时,可选择是从.NET Framework提供的Form类继承还是从以前创建的窗体继承。另外,窗体也是控件,因为它们从Control类继承。
在 Windows 窗体应用程序内,窗体是用户交互的主要载体。通过组合不同控件集和编写代码,可从用户得到信息并响应该信息,可使用现有数据存储,还可以查询数据并将结果写回到用户本地计算机上的文件系统和注册表中。
1.3.3 ADO.NET
ADO.NET使应用程序可使用存储的数据。如图1-7所示,对关系型数据库管理系统的访问依赖于作为托管代码编写的.NET Framework 数据提供程序。.NET Framework 中附带了允许访问 SQL Server、Oracle和其它关系型数据库管理系统的提供程序。它们可使客户端应用程序对 关系型数据库管理系统发出命令,并检查这些命令返回的任何结果。例如,可通过两种方式检查结构化查询语言(SQL)查询的结果。只需要一次读取一行结果的应用程序可使用DataReader 对象一次一条记录地扫描结果。需要使用查询结果执行更复杂工作(如将结果发送到浏览器、更新信息或将这些信息存储到磁盘上)的应用程序可改为将查询结果打包在DataSet对象中。
7
.NET Framework 2.0 程序设计
图 1-6 ADO.NET 可使 .NET Framework 应用程序访问存储在 DBMS 和 XML 文档中的数据。
如图 1-6所示,DataSet可包含一个或多个表。每个表可容纳不同查询的结果,因此单个 DataSet可能包含两个或更多查询的结果,并且可能来自于不同的关系型数据库管理系统。实际上,DataSet是作为数据的内存中缓存。然而,如图所示,DataSet不仅仅可容纳SQL查询的结果。它还可以将XML文档直接读入DataSet的表中,而无需依赖于.NET Framework数据提供程序。使用XML定义的数据在过去几年中已经变得更加重要,因此ADO.NET允许直接访问 XML。
1.3.4 分布式应用程序
创建与其它软件进行通信的软件是现代应用程序开发的一个标准部分。但是不同的应用程序有不同的通信要求。为了满足这些不同的需求,.NET Framework 类库包含三种不同的技术用于创建分布式应用程序,如图 1-7所示。
8
第 1 章 .NET Framework 2.0简介
图 1-7 分布式应用程序可使用 ASP.NET Web 服务、.NET 远程处理或企业级服务
ASP.NET Web服务主要在System.Web.Services中定义,它允许应用程序使用Web服务进
行通信。由于它是 ASP.NET 的一部分,因此此项技术可使开发人员使用相似的模型来创建分布式软件。如图 1-7 所示,将方法作为 Web 服务公开的应用程序可以从扩展名为.asmx的文件构建,每个.asmx 只包含代码。客户端使用标准 Web 服务协议SOAP发出请求,并载入和执行正确的页面。因为此技术是 ASP.NET的一部分,所以请求和应答同样可通过Windows的标准Web服务器Internet信息服务(IIS)进行收发。
注意:“SOAP”最初是“简单对象访问协议”(Simple Object Access Protocol)的缩写。现在,
拥有此项技术的标准组织已决定 SOAP 不再代表任何含义,它只是一个名称。 通过Web服务的通信对于与基于非.NET Framework 平台(如 Java 环境)构建的软件进行互操作特别有用。但Web服务并非总是正确的解决方案。某些情况下,
System.Runtime.Remoting命名空间中定义的称为“.NET远程处理”的技术是更好的选择。与ASP.NET Web 服务不同,.NET 远程处理侧重于基于.NET Framework 构建的应用程序之间的直接通信。虽然它不支持 SOAP 版本,但是此项技术也提供了一种二进制协议以及使用开发人员需要的任何其它协议添加扩展的能力。.NET远程处理并不是通信的最常用选择,但是它对于某些类型的应用程序可能非常重要。
使用.NET Framework创建分布式应用程序的第三个选项是企业级服务。企业级服务是在 System.EnterpriseServices命名空间中定义的,它为应用程序提供了分布式事务等多种服务。图 1-7演示了这一点,图中显示了一个访问两个数据库的服务器应用程序。如果所包含的单个事务同时更新这两个数据库,则企业级服务无疑将是使用此事务的应用程序的正确选择。远程客户端可使用 DCOM 直接与企业级服务应用程序进行通信,并且ASP.NET应用程序还可以在需要时使用企业级服务。
9
.NET Framework 2.0 程序设计
1.4 .NET Framework的运行环境
.NET Framework已成为未来大多数Windows应用程序的基础。为了使这一点成为现实,Framework 运行在多种版本的 Windows 上,包括 Windows 2000、Windows XP、Windows Server 2003 以及 Windows Vista。它还可用于 64 位版本的 Windows XP、Windows Server 2003 以及 Windows Vista。但是,.NET Framework不能在老式系统上运行,如 Windows 95 或 Windows NT。
.NET Framework 还支持成为并行执行的选项。该选项不仅仅支持同时执行同一个应用程序的多个版本,而且还支持 .NET Framework 本身的多个版本。例如,公司里的一台机器上装有基于.NET Framework 1.1开发的工具A。由于业务需求,现在要安装一个基于.NET Framework 2.0开发的工具B。我们完全可以在机器上同时安装.NET Framework 1.1 版和 2.0 版,它们不会相互影响。A仍然使用.NET Framework 1.1,B则使用.NET Framework 2.0。这可使公司迁移到新版本的.NET Framework,而又无需变动在老版本上运行的现有应用程序。
1.5 小结
通过本章的学习,我们了解什么是.NET Framework。.NET Framework是由公共语言类型库和类库构成的。有多种类型的.NET Framework应用程序,它们被广泛应用到各种领域中。.NET Framework已成为未来大多数Windows应用程序的基础,但是它不能在老式系统上运行,如 Windows 95 或 Windows NT。
1.6 习题
1. 什么是.NET Framework?
2. 简述.NET Framework的体系结构并说明各部分作用。
3. 说明.NET Framework类库采用命名空间树的结构的目的,并举例.NET Framework类库的命名空间及其成员说明。
4. 列举几个常见的.NET Framework应用程序种类并说明特点。 5. .NET Common Language Runtime 的作用是?
A.是.NET 托管程序的执行引擎
B.供.NET 托管程序调用的API 集合 C..NET 托管程序的编译程序
D.支持.NET 托管程序的操作系统 6. .NET Framework 不支持哪种类型的用户界面?
A. Web 窗体 B. Windows 窗体 C. 控制台应用程序 D. COM 组件
10
第2章 公共语言运行库和类型
正如前章所言,公共语言运行库是.NET Framework中最重要的部件,是其它一切的基石。因此,要在.NET Framework环境中进行开发,首先必须对公共语言运行库有一个比较透彻的了解。
回顾一下前章,我们知道基于公共语言运行库(Common language Runtime,CLR)构建的软件代码称为托管代码,CLR提供了创建和运行托管代码的全部内容。而CLR的核心内容其实就是通用类型系统(CTS)和元数据(元数据储存了如何使用托管代码的信息)。当然,CLR还提供了一些别的内容,例如,用于打包托管代码的技术、用于执行托管代码的运行时环境。作为 .NET Framework 最基本的部分,CLR无疑是理解.NET Framework 所提供功能的入手之处。学习完本章内容后,你将能够:
z 熟悉.NET的核心部分公共语言运行库和类型 z 进一步熟悉.NET,因为您已经掌握了它的核心
2.1 构建托管代码:通用类型系统
著名计算机科学家N.Wirth提出过这样一个公式:算法 + 数据结构 = 程序,而数据结构在微软.NET Framework平台中的形式就是通用类型系统(Common Type System),简称CTS。
现在的计算机世界中有着各种各样的编程语言,但稍加观察就不难发现,他们几乎都有类似的特点 — 支持的数据类型大体相似(如VB.NET和C#都支持整形、字符串形等)。.NET Framework利用了这一特性,将不同编程语言的数据类型进行抽象,由此产生了CTS。
CTS构成了.NET Framework的公共语言运行库的基础,它为.NET平台的多语言特性提供了支持。.NET平台的每一种语言都有自己的语法特色和数据类型,但最终都会被转换为.NET的基础数据类型,如VB .NET中的Single类型以及C#中的float类型实际上是CTS中的基础数据类型System.Single的化名。
CTS不仅定义了所有的数据类型,并提供了面向对象的模型以及各种语言需要遵守的标准。CTS可以分为两个大类:值类型和引用类型,同时这两种类型之间还可以进行强制转换,这种转换被称为Boxing(装箱)和UnBoxing(拆箱)。
2.2 通用类型系统
图 2-1中显示了CTS定义的大部分类型的子集。值得注意的首要一点是每种类型都直接或间接继承名为Object的类型。需要注意的第二点是CTS定义的每一个类型不是引用类型就是值类型。顾名思义,引用类型的实例总是包含对该类型的值的引用,而值类型实例包含值本身。引用类型直接继承Object,如String类,而所有值类型直接继承名为ValueType的类型,如Int32型,该类型同样继承自Object。