C#命名空間

命名空間旨在提供一種將一組名稱與另一組名稱分開的方法。在一個命名空間中聲明的類名稱與在另一個命名空間中聲明的相同類名稱不衝突。

定義命名空間

命名空間定義以關鍵字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