命名空间提供了一种组织相关类和其他类型的方式。它是一种逻辑组合,而不是物理组合。在C#文件中定义类时,可以把它包括在命名空间定义中。以后,在定义另一个类,在另一个文件中执行相关操作时,就可以在同一个命名空间中包含它。
把一个类型放在命名空间中,可以有效地给这个类型指定一个较长的名称,该名称包括类型的命名空间,后面是句点(.)和类的名称。
... {
using System;
public struct Test
...{
...........
}
}
也可以在命名空间中嵌套其他命名空间,为类型创造层次结构。
... {
namespace Note
...{
namespace One
...{
class Test
...{
.........
}
}
}
}
每个命名空间名都由它所在的命名空间的名称组成,这些名称用句点分隔开。可以组织自己的命名空间定义中的命名空间,上面的代码也可以写为:
... {
class Test
...{
............
}
}
注意不允许在另一个嵌套的命名空间中声明多部分的命名空间。它与程序集无关。同一个程序集中可以有不同的命名空间,也可以在不同的程序集中定义同一个命名空间的类型。
using语句
显然命名空间相当长,键入起来很烦琐,用这种方式指定某个类也是没必要的,因为C#允许简写类的全名。在文件的顶部列出类的命名空间,前面加上using关键字,在文件的其他地方,就可以使用其类型名称来引用命名空间中的类型了:
using Ling.Note.One;
所有的C#源代码都以语句using System;开头,因为Microsoft提供的许多有用的类型都包含在System命名空间中。
如果using指令引用的两个命名空间包含同名的类,就必须使用完整的名称(或者至少较长的名称),确保编译器知道访问哪个类型。
要注意,using语句在这些文件之间并没有建立物理链接。
命名空间的别名
using关键字的另一个用途是给类和命名空间指定别名。如果命名空间的名称非常长,又要在代码中使用多次,但不希望该命名空间的名称包含在using指令中,就可以给该命名空间指定一个别名:
下面的例子给ling.note.one命名空间指定ling别名,并使用这个别名实例化了一个test对象,这个对象是在该命名空间中定义的。注意命名空间别名的修饰符是::。
using Chen =L ing.Note.One;
class Pro
... {
public static int Main()
...{
Chen::Test NamespaceTest= new Chen::Test();
Console.WriteLine(NamespaceTest.GetNamespace());
return 0;
}
}
namespace Ling.Note.One
... {
class Test
...{
................
public string GetNamespace()
...{
return this.GetType().Namespace;
}
}
}