C 中的程式集和命名空間

2021-07-24 21:06:51 字數 2381 閱讀 1283

作為乙個.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 清單也是乙個元資料表集合,表中主要包含作為程式集組成部分的那些檔案的名稱。此外,還描述了程式集的版本 語...