程序集/命名空间/类型的区别

我们都知道代码库的重要性,像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。
using System;
public class MyApp
{
static void Main()
{
Console.WriteLine("Hi from C#");
}
}
' 用VB写的Hello world。
Imports System
Public Module MyApp
Sub Main()
Console.WriteLine("Hi from VB")
End Sub
End Module
// 用C++/CLI写的Hello world。 
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hi from C++/CLI");
return 0;
}

注意,每种语言都使用了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

25

 

 

 

 

 

System.Reflection.Emit

这些命名空间定义了一些类型,支持运行时类

型发现与类型的动态创建

System.Runtime.InteropServices

这个命名空间提供了一些设施,使得.NET类型

可以与“非托管代码”交互(例如,基于C

DLLCOM服务器),或反过来

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数据交互的类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值