命名空间旨在提供一种将一组名称与另一组名称分开的方法。在一个命名空间中声明的类名称与在另一个命名空间中声明的相同类名称不冲突。
定义命名空间
命名空间定义以关键字namespace
开头,后跟命名空间名称如下:
namespace namespace_name
{
// code declarations
}
要调用命名空间启用的任一函数或变量的版本,请按如下所示使用命名空间名称指定:
namespace_name.item_name;
以下程序演示了命名空间的使用:
using System;
namespace first_space
{
class namespace_cl
{
public void func()
{
Console.WriteLine("Inside first_space");
}
}
}
namespace second_space
{
class namespace_cl
{
public void func()
{
Console.WriteLine("Inside second_space");
}
}
}
class TestClass
{
static void Main(string[] args)
{
first_space.namespace_cl fc = new first_space.namespace_cl();
second_space.namespace_cl sc = new second_space.namespace_cl();
fc.func();
sc.func();
Console.ReadKey();
}
}
当编译和执行上述代码时,会产生以下结果:
Inside first_space
Inside second_space
using关键字
using
关键字指出程序正在使用给定命名空间中的名称。例如,在前面章节的示例程序中使用了System
命名空间。Console
类是在System
命名空间中定义的,所以只简写为:
Console.WriteLine ("Hello there");
可以把完整的名称写成:
System.Console.WriteLine("Hello there");
还可以使用using namespace
伪指令避免前缀命名空间。该指令告诉编译器后续代码正在使用指定命名空间中的名称。因此,命名空间隐含在以下代码中:
下面重写我们重写前面的例子,使用以下代码中的指令:
using System;
using first_space;
using second_space;
namespace first_space
{
class abc
{
public void func()
{
Console.WriteLine("Inside first_space");
}
}
}
namespace second_space
{
class efg
{
public void func()
{
Console.WriteLine("Inside second_space");
}
}
}
class TestClass
{
static void Main(string[] args)
{
abc fc = new abc();
efg sc = new efg();
fc.func();
sc.func();
Console.ReadKey();
}
}
当编译和执行上述代码时,会产生以下结果:
Inside first_space
Inside second_space
嵌套命名空间
可以在一个命名空间中定义另一个命名空间,如下所示:
namespace namespace_name1
{
// code declarations
namespace namespace_name2
{
// code declarations
}
}
可以使用点(.
)运算符访问嵌套命名空间的成员,如下所示:
using System;
using first_space;
using first_space.second_space;
namespace first_space
{
class abc
{
public void func()
{
Console.WriteLine("Inside first_space");
}
}
namespace second_space
{
class efg
{
public void func()
{
Console.WriteLine("Inside second_space");
}
}
}
}
class TestClass
{
static void Main(string[] args)
{
abc fc = new abc();
efg sc = new efg();
fc.func();
sc.func();
Console.ReadKey();
}
}
当编译和执行上述代码时,会产生以下结果:
Inside first_space
Inside second_space