.NET Framework 2.0 程序设计
图 1-1 .NET Framework 结构
仅使用 .NET Framework公共语言运行库提供的功能的代码称为托管代码。如图 1-2所示,我们可以完全依赖于公共语言运行库以及 .NET Framework 类库的相关部分,纯粹从托管代码构建应用程序。我们也可以通过组合托管代码和非托管代码来构建应用程序,两种代码根据需要进行交互。第二种选择(如图 1-2中的右半部分所示)对于现有应用程序尤其重要。现在创建的大部分新的Windows应用程序都是用托管代码构建的,但是使用托管代码扩展.NET 之前就已存在的应用程序同样很有用处。例如,企业可以复用.NET之前开发的程序,使用它提供的功能(非托管代码),同时使用公共语言运行库提供的功能(托管代码)。当然,也可以像.NET Framework问世以前一样,完全使用非托管代码创建Windows应用程序,.NET Framework 并不是非用不可。
图 1-2 托管代码和非托管代码
2
第 1 章 .NET Framework 2.0简介
托管代码通常是面向对象的,因此它所创建和使用的对象称为托管对象。一个托管对象可
使用和继承另一个托管对象,即使两个对象是用不同的语言编写的。这是.NET Framework 类库成为开发代码的有效基础的关键所在:即以任何基于公共语言运行库的语言编写的对象都可继承和使用该类库的代码。例如,用户完全可以使用C#编写一个类,在VB.NET中继承这个类或者直接使用这个类。由于公共语言运行库是.NET Framework中所有其它内容的基础,因此我们将从理解公共语言运行库入手来深入了解.NET Framework。
1.2 .NET Framework的结构
如图 1-1所示,使用.NET Framework编写的每个应用程序都依赖于公共语言运行库。公共语言运行库提供了一组通用数据类型,这些类型充当C#、VB.NET以及任何其它针对.NET
Framework 的语言的基础。例如:VB.NET中提供了Integer类型,C#中提供了System.Int32类型,它们都与公共语言运行库中的System.Int32类型相对应。由于无论开发人员选择何种语言这一基础都是相同的,因此开发人员将看到更为一致的环境。
1.2.1 公共语言运行库
请先思考一下我们以前所学的编程语言,如VB.NET和C#,它们通常是如何定义的。每种语言一般都有自己独特的语法、自己的控制结构集、独特的数据类型集和自己的类继承概念等多种内容。例如:VB.NET使用换行结束当前语句,C#中则使用“;”来结束当前语句。目前对于现代编程语言所应提供的多数功能,人们已达成了广泛的共识。虽然开发人员对于编程语言的语法不能达成一致意见,有的人喜欢花括号,而有的人则不喜欢,但是对于语言应提供的语义仍然存在着广泛的共识。既然如此,为什么不为这些语义定义一种标准实现,然后允许使用不同的语法来表达这些语义呢?
公共语言运行库利用了不同编程语言的相似性,抽象出了通用类型系统(Common Type System,CTS)。通用类型系统构成了.NET Framework的公共语言运行库的基础,它定义了.NET Framework中的所有的数据类型,并提供了面向对象的模型以及各种语言需要遵守的标准。简单来说,无论我们用C#还是VB.NET开发,它们中的所有数据在编译后都转化成了CTS中定义的类型,这就意味着.NET代码中的全部数据最终都以相同的数据类型存储。但是公共语言运行库不涉及语法。编程语言的表示形式如何?它是包含花括号、冒号还是其它什么符号?这些问题完全由编程语言设计者决定。公共语言运行库本身为编程语言设计者提供了构建工作要基于的统一语义集。
注意:但并非所有特性都可以用语言来描述。例如,C#中包含带符号字节数据类型,而该类型
在Visual Basic .NET中却找不到。这就可能引起语言互操作性方面的问题,所以公共语言规范(Common Language Specification,CLS)定义了通用类型系统的一个子集,也就是.NET 语言编译器必须符合的最低标准,并因此确保了.NET 编译器所编译的任何源代码都可与.NET Framework 进行互操作。 公共语言运行库不是以任何特定编程语言定义的。相反,它的功能主要是从现有流行的编程语言中派生的,如 C++、.NET 之前的 VB 版本以及 Java。现在,微软提供了多种基于公共语言运行库的语言,包括VB.NET、C#、经过改进的C++和JScript.NET,以及后来增加的Visual J#。第三方也提供了构建于公共语言运行库的语言。
3
.NET Framework 2.0 程序设计
1.2.2 .NET Framework类库
.NET Framework类库提供了一整套通用功能的标准代码,这些代码包含了开发人员可用于简化其开发工作的类和其它类型的库。例如,System.Windows.Forms命名空间包含了构建Windows窗体及其所使用控件的所有类。虽然这些类本身都是用C#编写的,但是以任何.NET语言编写的应用程序都可使用 .NET Framework 类库中的代码,例如用 C#、VB.NET、C++ 或 .NET Framework 所支持的任何其它语言编写的代码可创建这些类的实例并调用其方法。如果公共语言运行库中的类是可继承的,这些代码还可以从公共语言运行库中的类继承。而且.NET Framework 类库支持跨语言的继承和调试,所谓跨语言的继承,比如我们可以在C#里面继承一个VB.NET定义的类,或使用一个VB.NET编写的代码,这样在C#程序里可以一样调试VB.NET程序。
.NET Framework 类库的内容组织为命名空间树。命名空间是执行相关功能的类型(如类和接口)的逻辑组织单位。例如,System.Windows.Forms命名空间包含了构建Windows窗体及其所使用控件的所有类。每个命名空间还可以包含其它命名空间。图 1-3显示了.NET Framework 类库命名空间树的极小一部分。
图 1-3 .NET Framework 类库命名空间树
所列出的命名空间包括以下这些: z System:树的根,此命名空间包含 .NET Framework 类库中所有其它命名空间。 System 还包含了公共语言运行库以及基于公共语言运行库构建的编程语言所使用的核心数据类型。这些类型包括整型的多种变体、字符串类型以及很多其它类型。
z System.Web:此命名空间包含对于创建 Web 应用程序有用的类型,并且与很多命名空间一样,它有下级命名空间。例如,开发人员可使用 System.Web.UI 中的类型来构建 ASP.NET 浏览器应用程序,而System.Web.Services中的类型用于构建ASP.NET Web服务应用程序。
4
第 1 章 .NET Framework 2.0简介
System.Data:此命名空间中的类型构成了 ADO.NET。例如,Connection 类用于建立与数
据库管理系统(DBMS)的连接,而 DataSet 类的实例用于缓存对该DBMS所发出的查询的结果。
z System.Windows.Forms:此命名空间中的类型组成了Windows窗体,它们用于构建 Windows GUI。以任何编程语言编写的.NET Framework应用程序已不再依赖于特定于语言的机制,如C++中早期的 Microsoft 基础类(MFC),而是使用 System.Windows.Forms 这一通用类型集来构建 Windows 图形界面。
z System.EnterpriseServices:此命名空间中的类型提供了某些类型的企业级应用程序所需要的服务。这些服务在.NET出现之前是通过COM+实现的,这些服务包括分布式事务、对象实例生命周期管理等等。此命名空间中最重要的类型,也是使用企业级服务的类所必须继承的类型是ServicedComponent类。
z System.XML:此命名空间中的类型提供对创建和使用由XML定义的数据的支持。例如,XmlDocument 类允许访问使用文档对象模型(DOM)的 XML 文档。此命名空间还包括对 XML 架构定义语言(XSD)和 XPath 之类的技术的支持。
类库中还定义了更多的命名空间,它们提供了对文件访问、对象状态序列化、远程访问对象等更多功能的支持。事实上,希望在.NET Framework基础上进行开发的开发人员所面临的最大课题是学习如何使用类库中提供的多种服务。对类库的熟悉程度,决定了开发人员编写代码的效率高低。开发人员熟悉类库,编写代码的效率自然就高。本书将会详细介绍这个庞大的类库中最为重要的几个方面。
下面,我们先来体验一下基于这个庞大类库的几个常见应用程序。
z
1.3 常见.NET Framework应用程序
1.3.1 ASP.NET Web应用程序
ASP.NET 允许开发人员创建浏览器可访问的应用程序。ASP.NET在System.Web命名空间中实现,它是.NET Framework的重要组成部分。作为相当流行的 Active Server Page(ASP)技术的后继者,ASP.NET应用程序是从一页或多页构建的。每个页面都包含 和标签以及可执行代码,并且通常带有.aspx 扩展名。如图 1-4所示,从浏览器通过 HTTP 发出的请求将使某个页面载入并执行。该页创建的任何输出随后将返回到发出请求的浏览器。
5
.NET Framework 2.0 程序设计
图 1-4 ASP.NET Web应用程序
构建有效的 Web 应用程序需要的不仅仅是将代码与 HTML 进行组合的能力。因此,ASP.NET 提供了一系列支持功能,包括:
z Web 控件,允许开发人员以熟悉的方式创建浏览器图形界面。通过将按钮和其它界面元素的对应标准ASP.NET控件拖放到窗体中,可以与构建本地 Windows 应用程序 图形界面非常相似的方式构建 Web 应用程序图形界面。 z 管理应用程序状态信息的机制。
z 对维护应用程序用户信息(有时称为成员资格信息)的内建支持。
z 对数据绑定的支持,这使得访问存储在关系型数据库管理系统或某些其它数据源中的信息更加方便。
由于 Web 应用程序的普及,ASP.NET 对开发人员的影响可能远甚于.NET Framework 类库的任何其它部分。
1.3.2 Windows窗体应用程序
Windows 窗体是用于 Microsoft Windows 应用程序开发的、基于 .NET Framework 的新平台。此框架提供一个有条理的、面向对象的、可扩展的类集,它使您可以开发丰富的 Windows 应用程序。另外,Windows 窗体可作为多层分布式解决方案中的本地用户界面。
6