22.1 引用其他程序集
? 在許多項(xiàng)目中,會(huì)使用其他程序集的類或類型,而不僅僅是自己聲明的。這些程序集(稱為類庫(kù))可能來(lái)自 BCL 或第三方供應(yīng)商,也可以是自己創(chuàng)建的。通常這些程序集文件的名稱以 .dll 擴(kuò)展名結(jié)尾,而不是 .exe。


? 假設(shè)還要寫一個(gè)名為 MyWidgets 的程序,而且想使用 SquareWidget 類。在代碼中沒有聲明類 SquareWidget,使用的是定義在 SuperLib 中的類。在編譯程序時(shí),需要給編譯器添加該引用。

? 在 Rider 中,右鍵項(xiàng)目,選擇“添加” ->
“引用”,選擇下方的“添加自”按鈕,找到對(duì)應(yīng)的程序集即可。


? 添加引用后,即可編譯 MyWidgets。

mscorlib 庫(kù)
? 有一個(gè)類庫(kù),幾乎先前的每個(gè)示例中都使用了它,即包含 Console 類的類庫(kù)。該類庫(kù)被定義在 mscorlib 程序集中的 mscorlib.dll 文件里。mscorlib 包含 C# 類型及大部分 .NET 語(yǔ)言基本類型的定義,在編譯時(shí),它必須被引用,因此不顯示放在引用目錄中。
? 因此,算上 mscorlib,圖 22.3 的過程看起來(lái)更像是圖 22.4 描述的那樣。

潛在的問題
? 若想擴(kuò)展上述類的能力,使用名為 CircleWidget 的類,并將其定義在 UltraLib 的程序集中。MyWidgets 的源代碼如下,創(chuàng)建一個(gè) SquareWidget 對(duì)象和一個(gè) CircleWidget 對(duì)象,分別定義在 SuperLib 和 UltraLib 中。

? 類庫(kù) UltraLib 的源代碼如下所示,并將 UltraLib 編譯成 dll,加入到項(xiàng)目引用列表中。注意,除了 CircleWidget 類外,還聲明了一個(gè)名為 SquareWidget 的類。

? 由于兩個(gè)庫(kù)都含有名為 SquareWidget 的類,編譯時(shí)會(huì)產(chǎn)生錯(cuò)誤信息,因?yàn)榫幾g器不知道使用 SquareWidget 類的哪個(gè)版本。

22.2 命名空間
- 命名空間可視為一個(gè)字符串,加在類名或類型名前面,通過點(diǎn)分隔。
- 命名空間名、分隔點(diǎn)、類名三者共同組成類的完全限定名。
- 命名空間是共享命名空間名的一組類和類型。

? 使用命名空間將一組類型組織在一起并命名。

? 例如,創(chuàng)建 MyCorp.SuperLib 命名空間并在其中聲明 SquareWidget 類。

? 當(dāng) MyCorp 公司提供更新的程序集時(shí),可以按照如下方式修改。

? 如果 UltraLib 程序集也被使用,那么編譯過程下。

22.2.1 命名空間名稱
- 命名空間名稱可以是任何有效標(biāo)識(shí)符,區(qū)分大小寫。
- 命名空間名稱可以包含任意數(shù)量的句點(diǎn)符號(hào),用于將層次化組織類型。

? 使用命名空間要點(diǎn)如下:
- 以公司名稱開頭。
- 在公司名之后跟著技術(shù)名稱。
- 不要與類或類型名稱相同。
22.2.2 命名空間的補(bǔ)充
- 命名空間內(nèi),每個(gè)類型名必須有別于所有其他類型。
- 命名空間內(nèi)的類型稱為命名空間的成員。
- 源文件可以包含任意樹木的命名空間聲明,可以順序也可以嵌套。

22.2.3 命名空間跨文件伸展
? 命名空間是非封閉的,可以在源文件后面或其他源文件中使用。


22.2.4 嵌套命名空間
-
文本嵌套
將命名空間的聲明放在一個(gè)命名空間聲明體內(nèi)部。
-
分離的聲明
為嵌套命名空間創(chuàng)建單獨(dú)的聲明,但必須在聲明中使用完全限定名。


22.3 using 指令
? using 指令包含 2 大作用:
- using 命名空間指令。
- using 別名指令。
? 關(guān)于 using 指令的要點(diǎn)如下:
- 必須放在源文件的頂端,在任何類型聲明之前。
- 應(yīng)用于當(dāng)前源文件中的所有命名空間。
22.3.1 using 命名空間指令
? 通過在源文件頂端放置 using 命名空間指令以避免使用長(zhǎng)名稱。

? 下面的代碼使用 using 命名空間指令來(lái)描述該代碼來(lái)自 System 命名空間的類或其他類型。

22.3.2 using 別名指令

? using 別名指令允許起一個(gè)別名給:
- 命名空間。
- 命名空間捏的一個(gè)類型。

- 前兩行告訴編譯器,Syst 是 命名空間 System 的別名,SC 是類 System.Consle 的別名。
- Main 的第一條語(yǔ)句使用命名空間 System 的別名,第二條語(yǔ)句使用完全限定名,第三條語(yǔ)句使用類的別名。
22.3.3 using static 指令
? 使用 using static 指令引用給定命名空間中的特定類、結(jié)構(gòu)體或枚舉,以不帶任何前綴地進(jìn)行訪問。

? using static 指令指定的類本身可以不是靜態(tài)的,類中非靜態(tài)類型成員不會(huì)被 using static 指令導(dǎo)入。
22.4 程序集的結(jié)構(gòu)
? 程序集本身不包含本地機(jī)器代碼,而是包含公共中間語(yǔ)言代碼。此外,還包含即時(shí)編譯器(JIT),在運(yùn)行時(shí)將 CIL 轉(zhuǎn)換為本機(jī)代碼所需要的一切信息。程序集的文件擴(kuò)展名通常為 .exe 或 .dll。
單文件程序集
? 大部分程序集由一個(gè)單獨(dú)的文件構(gòu)成:
-
程序集清單。
- 程序集標(biāo)識(shí)符。
- 組成程序集的文件列表。
- 一個(gè)指示程序集中內(nèi)容在哪里的地圖。
- 關(guān)于引用的其他程序集的信息。
-
類型元數(shù)據(jù)。
包含程序集中定義的所有類型的信息。
-
CIL 中間代碼。
-
資源部分。
該部分可選??梢园瑘D形或語(yǔ)言資源。

多文件程序集
? 程序集代碼文件稱為模塊。盡管大部分程序集由單個(gè)文件構(gòu)成,但有些程序集含有多個(gè)文件。對(duì)于有多個(gè)模塊的程序集,一個(gè)文件是主模塊,其他為次要模塊。
- 主模塊含有程序集的清單和次要模塊的引用。
- 次要模塊的文件名以擴(kuò)展名 .netmodule 結(jié)尾。
- 多文件程序集被視為一個(gè)單元,一起部署并一起定版。

22.5 程序集標(biāo)識(shí)符
? 在 .NET 框架中,程序集的文件名相對(duì)不重要,更重要的是程序集的標(biāo)識(shí)符,其包含 4 個(gè)組成部分:
-
簡(jiǎn)單名稱。
不帶文件擴(kuò)展名的文件名,也稱為程序集名或友好名稱。
-
版本號(hào)。
形式為 MajorVersion.MinorVersion.Build.Revision,例如:2.0.35.9。
-
文化信息。
一個(gè)由 2 ~ 5 個(gè)字符組成的字符串,代表一種語(yǔ)言、國(guó)家或地區(qū)。例如,沒過使用的英語(yǔ)文化名是 en-US,德國(guó)使用的德語(yǔ)文化是de-DE。
-
公鑰。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-800381.html
由程序集公司生產(chǎn)的唯一字符串(128 字節(jié))。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-800381.html


22.6 強(qiáng)命名程序集(*)
22.7 私有程序集的部署(*)
22.8 共享程序集和 GAC(*)
22.9 配置文件(*)
22.10 延遲簽名(*)
到了這里,關(guān)于C# 圖解教程 第5版 —— 第22章 命名空間和程序集的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!