C 的命名空間和程式集

2021-06-27 19:54:04 字數 2728 閱讀 3183

命名空間與程式集

using作為引入命名空間指令的用法規則為:

using namespace;

在.net程式中,最常見的**莫過於在程式檔案的開頭引入system命名空間,其原因在於system命名空間中封裝了很多最基本最常用的操作,下面的**對我們來說最為熟悉不過:

using system;

這樣,我們在程式中就可以直接使用命名空間中的型別,而不必指定詳細的型別名稱。using指令可以訪問巢狀命名空間。

關於命名空間:

命名空間是.net程式在邏輯上的組織結構,而並非實際的物理結構,是一種避免類名衝突的方法,用於將不同的資料型別組合劃分的方式。例如,在.net中很多的基本型別都位於system命名空間,資料操作型別位於system.data命名空間,

1. mscorlib.dll 含有 c# 型別以及大部分 .net 語言的基本型別的定義,在編譯 c# 程式時,它必須總是被引用,所以 visual studio 不把它顯示在 reference 目錄中。

2. 命名空間把一組型別組合在一起並給它們乙個命名空間名稱,帶有命名空間名稱和類名的整體字串被稱為完全限定名。

3. 命名空間內的每個型別必須有別於所有其他型別,命名空間內的型別成為命名空間的成員,乙個原始檔可以包含任意數目的命名空間宣告,可以順序也可巢狀。

4. 命名空間不是封閉的,可以在不同的原始檔中宣告,原始檔可以被編譯成單一的程式集或分離的程式集。乙個命名空間可以是另乙個命名空間的成員,這個成員被稱為巢狀的命名空間,注意內層命名空間的成員 (如:類) 不是外層命名空間的成員 。

5. 巢狀命名空間有兩種形式: 1. 在乙個命名空間中宣告另乙個命名空間; (在命名空間a中宣告b命名空間)2. 單獨宣告乙個命名空間,名稱為:外層命名空間名 . 次命名空間名(比如:a.b,表示命名空間a 中還有乙個命名空間b,b是a的子命名空間)。

6. using 指令必須放在原始檔中任何型別宣告之前,它通知編譯器要使用來自某個指定命名空間的型別, using 還允許給命名空間或命名空間內的乙個型別起乙個別名,如: 

using sys = system;  

using sc = system.console;

7. 程式集大多由乙個單獨的檔案構成,它的4大部分包括:清單、型別元資料、cil**、資源。少數多檔案組成的程式集其中乙個檔案是主模組,其他的是次要模組,主模組含有程式集清單和到次要模組的引用。多檔案程式集被視為乙個單一單元,一起被部署和定版。

8. 程式集清單中包含程式集的識別符號,包括:簡單名、版本號、文化資訊及公鑰。公鑰是公鑰/私鑰對的一部分,它們是一組兩個非常大的經過遴選的數字,可以用於建立安全的數字簽名。

9. 強名稱程式集有乙個唯一的數字簽名,這個數字簽名唯一的表示了程式集,帶強名稱的程式集的內容不能被修改 。強名稱是由編譯器產生的,它接受關於程式集的資訊,並雜湊這些資訊以建立乙個唯一的資料簽名依附到該程式集。

10. 用vs強命名乙個程式集,必須有乙個公鑰/私鑰對檔案的拷貝,在工程屬性中選擇簽名頁,選擇為程式集簽名核取方塊並輸入金鑰檔案的位置,編譯器在編譯時就會生成乙個強命名的程式集。

11. 將乙個程式集所依賴的檔案 都放在同一目錄或子目錄下並複製到一台機器 上進行部署 這種方式叫做複製檔案 (xcopy) 部署,通過這種方式部署的程式集叫做私有 程式集。私有程式集可以是強命名的或者是弱命名的,它所在的目錄被稱為應用程式目錄,沒有必要在登錄檔中註冊元件,若要解除安裝它,只需刪除即可。

12.若要將乙個 dll 放在乙個中心位置,使其能被系統中的其他程式集所共享 ,則應將其放進全域性程式集快取 (gac) ,放進 gac的程式集稱為共享程式集。注意:只有強名稱的程式集才能被放進 gac , .dll 和 .exe 檔案都可以放進gac ,它在windows\assembly 目錄中。

13. 在安裝乙個程式集到 gac 之前, clr 的安全元件會首先檢查程式集上的數字簽名是否有效,若無效,則不會將它安裝到 gac ,若程式集已經在 gac 內,則當它被正在執行的程式集引用時,不會再進行檢查,這是一次性的。

14.gacutil.exe 命令列工具允許從 gac 新增或刪除程式集,並列出gac包含的程式集。主要引數有:

-i :將乙個程式集插入(insert)gac;  

-u :從 gac 解除安裝 (uninstall) 乙個程式集; 

-l :列出 (list)gac 中的程式集。

15. 程式集的識別符號是由它所包含的四大部分 ( 簡單名、版本號、文化資訊及公鑰 ) 組成的,若有任一部分不同則就制定了不同的程式集,所以 gac中可以有檔名相同但完全不同的程式集,它們可以完美共存,互不影響,解決了dll hell的問題。

16. 配置檔案含有關於應用程式的資訊,供clr在執行時使用。配置檔案的乙個用途是更新乙個應用程式集已使用新版本的dll ,在新版本dll被註冊到gac中後,如果不想重新編譯程式但又希望它使用新的dll ,則可以建立乙個配置檔案告訴 clr 去使用新的版本,配置檔案被放在應用程式目錄中。注意:配置檔案的名稱由可執行檔案的全名 ( 包括副檔名 ) 加上附加副檔名 .config 組成。

17. 通常為保護金鑰,強名稱都在最後進行,但弱命名的程式集不能部署到 gac ,這會影響到開發和測試工作,延遲簽名用來解決此問題。在延遲簽名中,編譯期只使用金鑰對中的公鑰 ,並且要為程式集範圍內的源**新增乙個名稱為 delaysignattribute 的附加特性,並將它的值設為true 。

18.編譯器產生的延遲簽名程式集中用內容為 0 的塊為數字簽名保留了空間,在將程式集部署到 gac 時,由於不是強名稱的,clr不會允許,要在機器上部署它,必須先使用命令列指令取消這台機器上的 gac 簽名確認,在 vs 的命令提示符下使用命令 sn –vr  *.dll

C 命名空間和程式集

本文內容 1.命名控制項與程式集的區別。命名空間用於對型別進行邏輯分組。程式集則是程式的物理分組,對應於乙個dll或exe檔案。2.為什麼要使用兩種方式分組?把邏輯分組作為物理分組不是更簡單嗎?邏輯分組主要針對開發人員,而物理分組主要針對安裝和部署。除此之外,以下情況也需要使用兩種方式分組,否則會很...

C 中的程式集和命名空間

作為乙個.net程式設計師有必要對命名空間和程式集有明確的認識,下文很好解釋了這兩者的關係,感謝作者!如果說命名空間是類庫的邏輯組織形式,那麼程式集就是類庫的物理組織形式。只有同時指定型別所在的命名空間及實現該型別的程式集,才能完全限定該型別。精通.net核心技術 原理與架構 程式集和命名空間不存在...

CLR 程式集和命名空間

控制台應用program並非只是含有元資料的pe檔案,他還是程式集 assembly 程式集是乙個或多個型別定義檔案及資源檔案的集合。在程式及的所有檔案中,有乙個檔案容納了清單 manifest 清單也是乙個元資料表集合,表中主要包含作為程式集組成部分的那些檔案的名稱。此外,還描述了程式集的版本 語...