频道栏目
读书频道 > 软件开发 > C# > 精通C# : 第6版
1.8 程序集/命名空间/类型的区别
2013-06-22 10:59:30     我来说两句
收藏   我要投稿

本文所属图书 > 精通C# : 第6版

本书是C# 领域久负盛名的经典著作,深入全面地讲解了C# 编程语言和.NET 平台的核心内容,并结合大量示例剖析相关概念。全书分为八部分:C# 和.NET 平台、C# 核心编程结构、C# 面向对象编程、高级C# 编程...  立即去当当网订购

我们都知道代码库的重要性,框架库的关键就是要给程序员提供一套定义明确的既有代码,从而显著提高开发效率。C#没有提供特定语言的代码库,但C#程序员可以利用语言无关的.NET代码库。为确保基础类库中的所有类型能良好地组织在一起,.NET平台提出了命名空间(namespace)的概念。

简单地讲,命名空间就是一个程序集内相关类型的一个分组。举例来讲,System.IO命名空间包含了有关文件I/O的类型,System.Data命名空间定义了基本的数据库类型,等等。需要特别指出的是,一个程序集(比如mscorlib.dll)可以包含任意个命名空间,每个命名空间又可以包含多种类型。

为了更清楚地阐述,图1-5展现了一个Visual Studio Object Browser的截图。这个工具可以用来检查当前项目引用的程序集、位于一个特定程序集中的命名空间、给定命名空间中的类型以及具体类型的成员。注意,mscorlib.dll包含了许多不同的命名空间(如System.IO),每个命名空间都拥有语义上相关的类型(如BinaryReader)。


 

这种方法和一个特定于语言的库的关键不同在于,任何基于.NET运行库的语言都可以使用相同的命名空间和相同的数据类型。举例来讲,下面3个程序分别使用了C#、VB和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.Common
System.Data.EntityClient
System.Data.SqlClient
这些命名空间用来使用ADO.NET与数据库交互
System.IO
System.IO.Compression
System.IO.Ports
这些命名空间定义了许多处理文件I/O、数据压缩和端口操作的类型
System.Reflection
System.Reflection.Emit
这些命名空间定义了一些类型,支持运行时类型发现与类型的动态创建
System.Runtime.InteropServices 这个命名空间提供了一些设施,使得.NET类型可以与“非托管代码”交互(例如,基于C的DLL和COM服务器),或反过来
System.Drawing
System.Windows.Forms
这些命名空间定义了使用.NET原始UI工具包(Windows Forms)来构建桌面应用程序所用到的类型
System.Windows
System.Windows.Controls
System.Windows.Shapes
System.Windows命名空间是一些表示WPF UI工具包的几个命名空间的根
System.Linq
System.Xml.Linq
System.Data.DataSetExtensions
这些命名空间定义了针对LINQ API编程时用到的类型
System.Web 这个命名空间用来构建ASP.NET Web应用程序
System.ServiceModel 这个命名空间用来通过WCF API构建分布式应用程序
System.Workflow.Runtime
System.Workflow.Activities
这两个命名空间定义了使用WWF API构建支持工作流的应用程序的类型
System.Threading
System.Treading.Tasks
这个命名空间定义了可以用来构建多线程应用程序(将工作负载分配到多个CPU上)的类型
System.Security 安全是.NET中的一个不可分割的方面。在这个以安全为中心的命名空间中,有很多用来处理权限、加密等问题的类型
System.Xml 这个以XML为中心的命名空间包括了众多用于与XML数据交互的类型
 
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.7 CLR
下一篇:1.8.1 Microsoft根命名空间的作用
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站