命名空间

命名空间(namespace) 专为提供一种来保留一套独立名字与其他命名区分开来的方式。一个命名空间中声明的类的名字与在另一个命名空间中声明的相同的类名并不会发生冲突。

命名空间的定义

命名空间的定义以关键字 namespace 开始,其后跟命名空间的名称:

  1. namespace namespace_name
  2. {
  3. // 代码声明
  4. }

调用的函数或变量的命名空间启用版本,在命名空间名称如下:

  1. namespace_name.item_name;

下面的程序演示了命名空间的使用:

  1. using System;
  2. namespace first_space
  3. {
  4. class namespace_cl
  5. {
  6. public void func()
  7. {
  8. Console.WriteLine("Inside first_space");
  9. }
  10. }
  11. }
  12. namespace second_space
  13. {
  14. class namespace_cl
  15. {
  16. public void func()
  17. {
  18. Console.WriteLine("Inside second_space");
  19. }
  20. }
  21. }
  22. class TestClass
  23. {
  24. static void Main(string[] args)
  25. {
  26. first_space.namespace_cl fc = new first_space.namespace_cl();
  27. second_space.namespace_cl sc = new second_space.namespace_cl();
  28. fc.func();
  29. sc.func();
  30. Console.ReadKey();
  31. }
  32. }

编译执行上述代码,得到如下结果:

  1. Inside first_space
  2. Inside second_space

关键字 using

关键词 using 指出了该程序是在使用给定的命名空间的名称。例如,我们在程序中使用的是系统命名空间。其中有 Console 类的定义。我们只需要写:

  1. Console.WriteLine ("Hello there");

我们还可以写完全限定名称:

  1. System.Console.WriteLine("Hello there");

你也可以使用 using 指令避免还要在前面加上 namespace 。这个指令会告诉编译器后面的代码使用的是在指定的命名空间中的名字。命名空间是因此包含下面的代码:

让我们重写前面的示例,使用 using 指令:

  1. using System;
  2. using first_space;
  3. using second_space;
  4. namespace first_space
  5. {
  6. class abc
  7. {
  8. public void func()
  9. {
  10. Console.WriteLine("Inside first_space");
  11. }
  12. }
  13. }
  14. namespace second_space
  15. {
  16. class efg
  17. {
  18. public void func()
  19. {
  20. Console.WriteLine("Inside second_space");
  21. }
  22. }
  23. }
  24. class TestClass
  25. {
  26. static void Main(string[] args)
  27. {
  28. abc fc = new abc();
  29. efg sc = new efg();
  30. fc.func();
  31. sc.func();
  32. Console.ReadKey();
  33. }
  34. }

编译执行上述代码,得到如下结果:

  1. Inside first_space
  2. Inside second_space

嵌套命名空间

你可以在一个命名空间中定义另一个命名空间,方法如下:

  1. namespace namespace_name1
  2. {
  3. // 代码声明
  4. namespace namespace_name2
  5. {
  6. //代码声明
  7. }
  8. }

你可以使用点运算符“.”来访问嵌套命名空间中的成员

  1. using System;
  2. using first_space;
  3. using first_space.second_space;
  4. namespace first_space
  5. {
  6. class abc
  7. {
  8. public void func()
  9. {
  10. Console.WriteLine("Inside first_space");
  11. }
  12. }
  13. namespace second_space
  14. {
  15. class efg
  16. {
  17. public void func()
  18. {
  19. Console.WriteLine("Inside second_space");
  20. }
  21. }
  22. }
  23. }
  24. class TestClass
  25. {
  26. static void Main(string[] args)
  27. {
  28. abc fc = new abc();
  29. efg sc = new efg();
  30. fc.func();
  31. sc.func();
  32. Console.ReadKey();
  33. }
  34. }

编译执行上述代码,得到如下结果:

  1. Inside first_space
  2. Inside second_space