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