作為乙個.net程式設計師有必要對命名空間和程式集有明確的認識,下文很好解釋了這兩者的關係,感謝作者!
如果說命名空間是類庫的邏輯組織形式,那麼程式集就是類庫的物理組織形式。
只有同時指定型別所在的命名空間及實現該型別的程式集,才能完全限定該型別。
《精通.net核心技術--原理與架構》
程式集和命名空間不存在必然聯絡,乙個程式集可以包含多個命名空間,同乙個命名空間也可以分放在幾個程式集。
程式集是應用程式的部署單元。.net應用程式包含乙個或多個程式集。通常副檔名是exe或dll 的.net可執行程式稱為程式集。.net程式集包含元資料,這些元資料描述了程式集中定義的所有型別及其成員的資訊,即方法、屬性、事件和字段。
在使用共享程式集時,幾個應用程式都使用同乙個程式集,且與它有一定的依賴關係。共享程
序集減少了磁碟和記憶體空間的需求。使用共享程式集時,要遵循許多規則。共享程式集必須有乙個
版本號和乙個唯一的名稱,通常它安裝在全域性程式集快取(globd assembly cache,gac,中。gac允
許共享系統上同乙個程式集的不同版本。
在乙個程式集中可以有不同的命名空間,同乙個命名空間也可以分布在多個程式集上。
命名空間只是型別名的一種擴充套件,它屬於型別名的範疇。
還可以這樣理解:命名空間就是乙個程式集內相關型別的乙個分組。舉例來講,system.io命名空間包含了有關檔案i/o的型別,system.data命名空間定義了基本的資料庫型別,等等。需要特別指出的是,乙個程式集(比如mscorlib.dll)可以包含任意個命名空間,每個命名空間又可以包含多種型別。
更好的理解程式集和命名空間的關係,可以開啟vs裡的物件瀏覽器,可以看到大量的程式集,程式集裡又包含了很多不同名的命名空間,同時可以看到乙個現象:不同的程式集又包含了同名的命名空間。
****************************************===
命名空間與裝配件的關係
很多人對這個概念可能還是很不清晰,對於合格的.net程式設計師,有必要對這點進行澄清。裝配件是.net應用程式執行的最小單位,編譯出來的.dll、.exe都是裝配件。
裝配件和命名空間的關係不是一一對應,也不互相包含,乙個裝配件裡面可以有多個命名空間,乙個命名空間也可以在多個裝配件中存在,這樣說可能有點模糊,舉個例子:
裝配件a:
namespace n1
public class ac2
}namespace n2
public class ac4
}裝配件b:
namespace n1
public class bc2
}namespace n2
public class bc4 }
這兩個裝配件中都有n1和n2兩個命名空間,而且各宣告了兩個類,這樣是完全可以的,然後我們在乙個應用程式中引用裝配件a,那麼在這個應用程式中,我們能看到n1下面的類為ac1和ac2,n2下面的類為ac3和ac4。
接著我們去掉對a的引用,加上對b的引用,那麼我們在這個應用程式下能看到的n1下面的類變成了bc1和bc2,n2下面也一樣。
如果我們同時引用這兩個裝配件,那麼n1下面我們就能看到四個類:ac1、ac2、bc1和bc2。
到這裡,我們可以清楚乙個概念了,命名空間只是說明乙個型別是那個族的,比如有人是漢族、有人是回族;而裝配件表明乙個型別住在**,比如有人住在北京、有人住在上海;那麼北京有漢族人,也有回族人,上海有漢族人,也有回族人,這是不矛盾的。
命名空間和程式集的關係:
1.從屬於乙個命名空間的各個型別可能在不同的程式集中實現。例如:system.io.filestream型別是在mscorlib.dll 程式集中實現的,而system.io.filesystemwatcher型別是在system.dll 程式集中實現的。事實上, .net framework 甚至根本沒有發布乙個system.io.dll程式集。(乙個程式集內可能有多個命名空間,同乙個命名空間可能存在於不同的程式集中.)
2.在乙個程式集中,也可能包含不同命名空間中的型別。例如,system.int32和system.text.stringbuilder型別都在mscorlib.dll程式集中。
3.在.net framework sdk文件中查詢乙個型別時,文件會明確的指出型別所屬的命名空間,以及實現了該型別的程式集。
(用乙個形象的比喻:乙個型別,它有兩個身份證,乙個是命名空間,乙個是程式集)
C 命名空間和程式集
本文內容 1.命名控制項與程式集的區別。命名空間用於對型別進行邏輯分組。程式集則是程式的物理分組,對應於乙個dll或exe檔案。2.為什麼要使用兩種方式分組?把邏輯分組作為物理分組不是更簡單嗎?邏輯分組主要針對開發人員,而物理分組主要針對安裝和部署。除此之外,以下情況也需要使用兩種方式分組,否則會很...
C 的命名空間和程式集
命名空間與程式集 using作為引入命名空間指令的用法規則為 using namespace 在.net程式中,最常見的 莫過於在程式檔案的開頭引入system命名空間,其原因在於system命名空間中封裝了很多最基本最常用的操作,下面的 對我們來說最為熟悉不過 using system 這樣,我們...
CLR 程式集和命名空間
控制台應用program並非只是含有元資料的pe檔案,他還是程式集 assembly 程式集是乙個或多個型別定義檔案及資源檔案的集合。在程式及的所有檔案中,有乙個檔案容納了清單 manifest 清單也是乙個元資料表集合,表中主要包含作為程式集組成部分的那些檔案的名稱。此外,還描述了程式集的版本 語...