C# 命名空间(Namespace)
当我们进行多人编程的时候,常常大家都会取相同的的类名称,常量名称,这往往导致了类冲突,严重的,会导致程序崩溃,就像我叫张三,你也叫张三,这时李四喊了一句张三,到底是叫你还是叫我呢?
为此,C# 引入命名空间 的概念,
命名空间 的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。
定义命名空间
命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:
namespace <namespace_name> { // 代码声明 }
当调用定义在命名空间内部的的函数或变量,会把命名空间的名称置于前面,如下所示:
<namespace_name>.<item_name>;
例如下面的程序
using System; namespace FuJian { class XiaMen { public void Speak() { Console.WriteLine("我是福建厦门人,我讲闽南语"); } } } namespace GuangDong { class GuangZhou { public void Speak() { Console.WriteLine("我是广东广州人,我讲粤语"); } } } class TestClass { static void Main(string[] args) { FuJian.XiaMen xc = new FuJian.XiaMen(); GuangDong.GuangZhou gc = new GuangDong.GuangZhou(); xc.Speak(); gc.Speak(); Console.ReadKey(); } }
当我们运行上面的代码时,输出如下结果:
我是福建厦门人,我讲闽南语 我是广东广州人,我讲粤语
using 关键字
using 关键字用于引入当前命名空间之外的命名空间。例如,我们在程序中使用 using System;
引入 System 命名空间后,我们使用其中定义的 Console 类。我们可以只写:
Console.WriteLine ("Hello there");
我们可以写完全限定名称,如下:
System.Console.WriteLine("Hello there");
当我们使用了 using 命名空间指令后,在使用该命名空间下的类/常量/结构等的时候就不用在前面加上命名空间名称。该指令告诉编译器随后的代码使用了指定命名空间中的名称。
让我们来改造下上面的例子,引入命名空间,去掉烦人的命名空间前缀:
using System; using FuJian; using GuangDong; namespace FuJian { class XiaMen { public void Speak() { Console.WriteLine("我是福建厦门人,我讲闽南语"); } } } namespace GuangDong { class GuangZhou { public void Speak() { Console.WriteLine("我是广东广州人,我讲粤语"); } } } class TestClass { static void Main(string[] args) { XiaMen xc = new XiaMen(); GuangZhou gc = new GuangZhou(); xc.Speak(); gc.Speak(); Console.ReadKey(); } }
当上面的代码被编译和执行时,它会产生下列结果:
我是福建厦门人,我讲闽南语 我是广东广州人,我讲粤语
嵌套命名空间
命名空间可以被嵌套,即您可以在一个命名空间内定义另一个命名空间,如下所示:
namespace <namespace_name1> { // 代码声明 namespace <namespace_name2> { // 代码声明 } }
您可以使用点(.)运算符访问嵌套的命名空间的成员,如下所示:
using System; using FuJian; namespace FuJian { class XiaMen { public void Speak() { Console.WriteLine("我是福建厦门人,我讲闽南语"); } } namespace FuZhou { class FuQing { public void Speak() { Console.WriteLine("我是福建福州福清人,我讲福州方言"); } } } } class TestClass { static void Main(string[] args) { XiaMen xc = new XiaMen(); FuZhou.FuQing fc = new FuZhou.FuQing(); xc.Speak(); fc.Speak(); Console.ReadKey(); } }
当上面的代码被编译和执行时,它输出以下结果:
我是福建厦门人,我讲闽南语 我是福建福州福清人,我讲福州方言
扩展阅读
简而言之
using 有如下几种用法
- using指令:引入命名空间,这是最常见的用法,例如:
using System; using ParentNameSpace.SubNameSpace;
- 通过 using static 指令,指定无需指定类型名称即可访问其静态成员的类型
using static System.Math; double area = PI * 5 * 5; // 直接使用System.Math.PI
- 利用 using 给命名空间起一个别名
using other_name = COM.MyCompany.Project;
- 利用 using 将范例与代码绑定
//代码段结束时,自动调用font3和font4的Dispose方法,释放范例。 using (Font font3 = new Font("Arial", 10.0f), font4 = new Font("Arial", 10.0f)) { // Use font3 and font4. }