本文內容**:
1.命名控制項與程式集的區別。
命名空間用於對型別進行邏輯分組。程式集則是程式的物理分組,對應於乙個dll或exe檔案。
2.為什麼要使用兩種方式分組?把邏輯分組作為物理分組不是更簡單嗎?
邏輯分組主要針對開發人員,而物理分組主要針對安裝和部署。
除此之外,以下情況也需要使用兩種方式分組,否則會很不方便。
1)團隊開發。乙個公司分別由不同的部門共同開發同乙個命名空間的不同元件。那麼不同的部門可以把他們開發的東西編譯成各自的dll檔案。使用時把幾個dll一起引用即可。
2)乙個命名空間裡包含的型別太多,而有大部分是用不上的。如果把乙個命名空間編譯成乙個dll,則會降低執行效率。
3)有時需要對乙個命名空間內的型別區別對待。如果打算開發乙個系列軟體,該軟體分普通版,專業版,高階版。越高的版本具有越高的許可權(當中包含了一些高階的類),這時可以把高階的功能放到乙個單獨的dll來控制。
3.型別可以沒有命名空間嗎?可以
4.object類的名字到底是object還是system.object?
可以說都是也可以說都不是。
1)對於il來說,確定乙個型別是需要程式集+型別全名稱的。比方呼叫object的tostring()方法,其實是[mscorlib.dll]system.object::tostring()。因此clr不知道命名空間的事情,它只知道呼叫mscorlib.dll中的system.object類。
2) 對於c#來說,編譯後會自動把命名空間加上點號讓型別名變成全名稱。但是,類名是不能出現點(.)符號的,以下**在邏輯上是成立的,但是c#語法不允許。
5.命名空間和程式集的關係:
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文件中查詢乙個型別時,文件會明確的指出型別所屬的命名空間,以及實現了該型別的程式集。
(用乙個形象的比喻:乙個型別,它有兩個身份證,乙個是命名空間,乙個是程式集)
4個容易混淆的概念
1、專案
新建專案的同時,會自動建立此專案對應的解決方案名稱,預設二者名稱一樣。
在.net下,乙個專案可以表現為多種型別:控制台應用程式、類庫、web應用程式等
2、解決方案
解決方案其實是乙個容器,其下邊可以包含多個專案。
例如機房重構解決方案下邊包含的7層(7個專案u/b/d)
3、程式集
可以理解為dll。每個專案都有乙個dll檔案,這個dll中包含了這個專案中所用到的所有的方法程式。
專案之間的引用呼叫,也是通過封裝的dll實現。
4、命名空間
類似於咱們的檔案目錄。引用命名空間的概念,其實是為了區分同名物件。我理解的命名空間其實就是姓名的「姓」,同名物件就是姓名的「名」。即使「名」一樣,但因為「姓」不一樣,也照樣可以區分。雖然都為「teacher」,但有王teacher、張teacher。
一般而言,命名空間盡量複雜,採用uri格式,例如some.some這樣的層次巢狀。
命名空間和專案:二者一樣嗎?
在專案裡可以定義很多種不同的命名空間,但為了方便呼叫,盡量在同乙個專案中,其命名空間是一樣的。
如果在該專案中新增乙個資料夾,預設情況下,該資料夾的命名空間是「專案命名空間.資料夾名」。這樣寫其實不太方便整個專案被引用。
命名空間和程式集:
在每個專案的properties中都可以設定。命名空間類似專案的存放路徑;程式集其實就是該專案 程式的集合(專案名.dll)。
啊啊啊,一堆文字的堆砌,就是沒個圖。
這就是3個(專案)程式集。
C 的命名空間和程式集
命名空間與程式集 using作為引入命名空間指令的用法規則為 using namespace 在.net程式中,最常見的 莫過於在程式檔案的開頭引入system命名空間,其原因在於system命名空間中封裝了很多最基本最常用的操作,下面的 對我們來說最為熟悉不過 using system 這樣,我們...
CLR 程式集和命名空間
控制台應用program並非只是含有元資料的pe檔案,他還是程式集 assembly 程式集是乙個或多個型別定義檔案及資源檔案的集合。在程式及的所有檔案中,有乙個檔案容納了清單 manifest 清單也是乙個元資料表集合,表中主要包含作為程式集組成部分的那些檔案的名稱。此外,還描述了程式集的版本 語...
C 中的程式集和命名空間
作為乙個.net程式設計師有必要對命名空間和程式集有明確的認識,下文很好解釋了這兩者的關係,感謝作者!如果說命名空間是類庫的邏輯組織形式,那麼程式集就是類庫的物理組織形式。只有同時指定型別所在的命名空間及實現該型別的程式集,才能完全限定該型別。精通.net核心技術 原理與架構 程式集和命名空間不存在...