我们都知道代码库的重要性,像MFC、J2EE和ATL这些代码库给程序员提供了一套定义明确的既有代码,可以显著提高开发效率。C#没有提供特定语言的代码库,但C#程序员可以利用一种语言无关的.NET代码库。为确保基类库中的所有类型能良好地组织在一起,.NET平台提出了命名空间(namespace)的概念。
简单地讲,命名空间就是一个程序集内相关类型的一个分组。举例来讲,System.IO命名空间包含了有关文件I/O的类型,System.Data命名空间定义了基本的数据库类型,等等。需要特别指出的是,一个程序集(比如mscorlib.dll)可以包含任意个命名空间,每个命名空间又可以包含多种类型。
为了更清楚地阐述,图1-5展现了一个Visual Studio 2008对象浏览器的截图。这个工具可以用来检查当前项目引用的程序集、位于一个特定程序集中的命名空间、给定命名空间中的类型以及具体类型的成员。注意,mscorlib.dll包含了许多不同的命名空间,每个命名空间都拥有语义上相关的类型。
(点击查看大图)图1-5 单程序集可以包含任意个命名空间 |
这种方法和一个特定于语言的库(比如MFC)的关键不同在于,任何基于.NET运行库的语言都可以使用相同的命名空间和相同的数据类型。举例来讲,下面3个程序分别使用了C#、VB.NET和C++/CLI编写,演示了常见的"Hello World"应用程序。
// 用C#写的Hello world。 public class MyApp ' 用VB写的Hello world。 Public Module MyApp // 用C++/CLI写的Hello world。 int main(array<System::String ^> ^args) |
注意,每种语言都使用了System命名空间中定义的Console类,除了语法上略微的不同,3个应用程序从外观上和逻辑上看起来非常相似。
应该清楚,.NET程序员的主要目标就是逐步了解大量定义在.NET命名空间里的类型。最基本的命名空间无疑是System。这个命名空间提供了大量核心的类型,是.NET程序员会反复使用的。实际上,因为核心数据类型(System.Int32、System、String等)是在System命名空间中定义的,所以如果完全不引用System命名空间,就根本无法开发C#应用程序。表1-3给出了一些(当然不是全部的)按相关功能分组的.NET命名空间的简单介绍。
表1-3 .NET命名空间举例
.NET命名空间 | 作 用 | ||
System | 在System内,你将会发现很多有用的类型, 可以用来处理内建数据、数学计算、随机数的 产生、环境变量、垃圾收集器以及一些常见 的异常和特性 | ||
System.Collections System.Collections.Generic | 这些命名空间定义了一些集合容器类型,还有 一些基类型和接口,使你有可能构建自定义的收集器 | ||
System.Data System.Data.Odbc System.Data.OracleClient System.Data.OleDb System.Data.SqlClient | 这些命名空间用来使用ADO.NET与数据库交互 | ||
System.IO System.IO.Compression System.IO.Ports | 这些命名空间定义了许多处理文件I/O、数据 压缩和端口操作的类型 | ||
System.Reflection
| 这些命名空间定义了一些类型,支持运行时类 型发现与类型的动态创建 | ||
System.Runtime.InteropServices | 这个命名空间提供了一些设施,使得.NET类型 可以与“非托管代码”交互(例如,基于C的 DLL和COM服务器),或反过来 | ||
System.Drawing System.Windows.Forms | 这些命名空间定义了使用.NET原始UI工具包 (Windows Forms)来构建桌面应用程序所用到的类型 | ||
System.Windows System.Windows.Controls System.Windows.Shapes | Systems.Windows命名空间是一些表示 WPF UI工具包的命名空间的根 | ||
System.Linq System.Xml.Linq System.Data.Linq | 这些命名空间定义了针对LINQ API编程时用到的类型 | ||
System.Web | 这个命名空间用来构建.NET Web应用程序 | ||
System.ServiceModel | 这个命名空间用来通过WCF API构建分布式应用程序 |
(续)
.NET命名空间 | 作 用 |
System.Workflow.Runtime System.Workflow.Activities | 这两个命名空间定义了使用WCF API构建 支持工作流的应用程序的类型 |
System.Threading | 这个命名空间定义了可以用来构建多线 程应用程序的类型 |
System.Security | 安全是.NET中的一个不可分割的方面。 在这个以安全为中心的命名空间中, 有很多用来处理权限、加密等问题的类型 |
System.Xml | 这个以XML为中心的命名空间包括了众多 用于与XML数据交互的类型 |