一.什么是名称空间?
名称空间是.net 中提供应用程序代码容器的方式,类似jave中的包。
名称空间的目的就是为了让引用更加准确。就像哪一栋教学楼、哪一层、哪一房间,确定唯一的标识代码及其内容。
二.引用名称空间的规则
一般情况下,c#代码储存在全局名称空间里,也就是说在该名称空间里的项可以被直接引用。换句话解释:不在同一个名称空间里的项被引用的路径是不一样的。如果要引用不在全局名称空间里的项,那么就要写出该名称空间的限定名称(项类似于变量或赋值语句)。
限定名称可以应用于包含该层所有信息(定义、项)的引用。限定名称在不同命名空间级别之间使用句点字符(.)连接。一般用namespace进行名称空间的定义。如下例:
namespace 名称1
{
// code in 名称1 namespace
// name "ageone" defined
namespace 名称2
{
// code in 名称2 namespace
// name "ageone" defined
}
} 注:上例的代码可能不规范。
上述代码中定义了两个名称空间 namespace1和2.和两个相同的项ageone. 引用不同名称空间的项的规则就是在名称1中使用该空间的ageone表示为ageone;引用名称2中的ageone则表示为名称1.名称2.ageone。
总的来说难以理解的就是“名称空间”这四个字而已。
三.名称空间与using语句
在名称空间中还有一个重要的角色可以使得引用大大简化,那就是using语句。 using的意思是“直接引用该名称空间中的项或名称”。 打个比方,如果在名称1中需要大量使用名称2中的项,那么岂不是每次都要进行复杂的引用吗?
namespace 名称1
{
using 名称2
// code in 名称1 namespace
// name "ageone" defined
namespace 名称2
{
// code in 名称2 namespace
// name "ageone" defined
// name "weight" defined
// name"singing" defined
}
}
相同的代码,但是名称空间2中的项变得很多,如果在名称空间1中需要大量的引用名称2中的项,这时只要添加using语句就可以免去不必要的引用代码。在名称1中直接可以引用weight 或 singing 项。
如果细心的话,可以发现这样的一个问题:名称1中有ageone,名称2中也有ageone,那么假如使用了using语句的话那么在名称空间1中不是会出现两个ageone吗?这样的话会使代码无法编译,使得系统崩溃。using语句可以为名称空间提供一个别名。
namespace 名称1
{
using T-名称2
// code in 名称1 namespace
// name "ageone" defined
namespace 名称2
{
// code in 名称2 namespace
// name "ageone" defined
// name "weight" defined
// name"singing" defined
}
}
如图,这样一来在名称空间1中如果要引用,则名称1.ageone表示为ageone;名称1.名称2.ageone表示为T-ageone。
再往上延伸,如果将using语句写在全局名称空间之上的话,那么using所定义的项就可以在各个嵌套名称空间里直接引用了。 如果和VB联系在一起,那么using就可以理解为声明全局变量和准确调用的情况。其实就是这样。