C#中的程序集和命名空間

C#中的程序集和命名空間

若是說命名空間是類庫的邏輯組織形式,那麼程序集就是類庫的物理組織形式。只有同時指定類型所在的命名空間及實現該類型的程序集,才能徹底限定該類型。《精通.NET核心技術--原理與架構》 程序集和命名空間不存在必然聯繫,一個程序集能夠包含多個命名空間,同一個命名空間也能夠分放在幾個程序集。html

程序集是應用程序的部署單元。.NET應用程序包含一個或多個程序集。一般擴展名是EXE或DLL 的.NET可執行程序稱爲程序集。.NET程序集包含元數據,這些元數據描述了程序集中定義的全部類型及其成員的信息,即方法、屬性、事件和字段。程序員

在使用共享程序集時,幾個應用程序都使用同一個程序集,且與它有必定的依賴關係。共享程序集減小了磁盤和內存空間的需求。使用共享程序集時,要遵循許多規則。共享程序集必須有一個版本號和一個惟一的名稱,一般它安裝在全局程序集緩存(globd assembly cache,GAC,中。GAC容許共享系統上同一個程序集的不一樣版本。數據庫

在一個程序集中能夠有不一樣的名稱空間,同一個名稱空間也能夠分佈在多個程序集上。名稱空間只是類型名的一種擴展,它屬於類型名的範疇。瀏覽器

還能夠這樣理解:命名空間就是一個程序集內相關類型的一個分組。舉例來說,System.IO命名空間包含了有關文件I/O的類型,System.Data命名空間定義了基本的數據庫類型,等等。須要特別指出的是,一個程序集(好比mscorlib.dll)能夠包含任意個命名空間,每一個命名空間又能夠包含多種類型。緩存

更好的理解程序集和命名空間的關係,能夠打開VS裏的對象瀏覽器,能夠看到大量的程序集,程序集裏又包含了不少不一樣名的命名空間,同時能夠看到一個現象:不一樣的程序集又包含了同名的命名空間。  架構

===========================================post

命名空間與裝配件的關係
不少人對這個概念可能仍是很不清晰,對於合格的.Net程序員,有必要對這點進行澄清。 裝配件是.Net應用程序執行的最小單位,編譯出來的.dll、.exe都是裝配件。        
裝配件和命名空間的關係不是一一對應,也不互相包含,一個裝配件裏面能夠有多個命名空間,一個命名空間也能夠在多個裝配件中存在,這樣說可能有點模糊,舉個例子:
url

裝配件A: 
namespace  N1
{
      public  class  AC1  {…}
      public  class  AC2  {…}
}
namespace  N2
{
      public  class  AC3  {…}
      public  class  AC4  {…}
}
spa

裝配件B:htm

namespace  N1
{
      public  class  BC1  {…}
      public  class  BC2  {…}
}
namespace  N2
{
      public  class  BC3  {…}
      public  class  BC4  {…}
}

這兩個裝配件中都有N1和N2兩個命名空間,並且各聲明瞭兩個類,這樣是徹底能夠的,而後咱們在一個應用程序中引用裝配件A,那麼在這個應用程序中,咱們能看到N1下面的類爲AC1和AC2,N2下面的類爲AC3和AC4。  

接着咱們去掉對A的引用,加上對B的引用,那麼咱們在這個應用程序下能看到的N1下面的類變成了BC1和BC2,N2下面也同樣。        
若是咱們同時引用這兩個裝配件,那麼N1下面咱們就能看到四個類:AC一、AC二、BC1和BC2。    

到這裏,咱們能夠清楚一個概念了,命名空間只是說明一個類型是那個族的,好比有人是漢族、有人是回族;而裝配件代表一個類型住在哪裏,好比有人住在北京、有人住在上海;那麼北京有漢族人,也有回族人,上海有漢族人,也有回族人,這是不矛盾的。

相關文章
相關標籤/搜索