命名空间
namespace Wrox { namespace ProCsharp { namespace Basics { class NamespaceExample { // Code for the C△ ass here... } } } }
每个名称空间都由它所在的名称空间的名称组成,这些名称用句点分隔开,开头是最外层的名称空间,最后是它自己的短名。所以ProCsharp的名称空间的全名是Wrox.ProCsharp.Basics.NamespaceExample的全名是Wrox.ProCsharp.NamespaceExample。
使用这个语法也可以阻止自己的名称空间定义中的名称空间,所以上面的代码也可以写为
namespace Wrox.ProCsharp.Basics { class NamespaceExample { // Code for the C△ ass here... } }
注意不允许在另一个嵌套的名称空间中声明多部分的名称空间。名称空间与程序集无关。同一个程序集中可以有不同的名称空间,也可在不同的程序集中的一同一名称空间的类型。
应在开始一个项目之前就计划定义名称空间的层次结构。一般可接受的格式是CompanyName.ProjectNameSystemSection.所以在上面的例子中,Wrox是公司名,ProCsharp是项目,对于本章,Basic是部分名。
1、using语句
显然,名称空间相当长,输入起来很繁琐,用这种方式指定某个类也不总是必要的,如本章开头所述,C#允许简写类的全名。为此,要在文件的顶部列出类的名称空间,前面加上using关键字。在文件的其它地方,就可以使用其类型名称来引用名称空间中的类型了:
using System; using Wrox.ProCsharp;
如前所述,几乎所有的C#源代码都以语句using System;开头,这仅是因为Microsoft提供的许多有用的类都包含在System名称空间中。
如果using语句引用的两个名称空间包含同名的类型,就必须使用完整的名称(或者至少较长的名称),确保编译器知道访问哪个类型。例如,假如类NamespaceExample同时存在于Wrox.ProCSharp.Basics和Wrox.ProCSharp.OOP名称空间中。如果要在名称空间Wrox.ProCsharp中创建一个类Test,并在该类中实例化一个NamespaceExample类,就需要指定使用哪个类:
using Wrox.ProCSharp.OOP; using Wrox.ProCSharp.Basics; namespace Wrox.ProCsharp { class Test { public static int Main() { Basics.NamespaceExample nsEx = neW Basics.NamespaceExample(); // do something with the nsEx variable. return 0; } } }
公司应花一些时间开发一种名称空间模式,这样其开发人员才能快速定位他们需要的功能,而且公司类不使用的类名也不会与现有的类库相冲突。