C#培訓(xùn)資料第十章.ppt_第1頁(yè)
C#培訓(xùn)資料第十章.ppt_第2頁(yè)
C#培訓(xùn)資料第十章.ppt_第3頁(yè)
C#培訓(xùn)資料第十章.ppt_第4頁(yè)
C#培訓(xùn)資料第十章.ppt_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第10章 命名空間和程序集,本章內(nèi)容,引用其他程序集 命名空間 Using指令 程序集的結(jié)構(gòu) 程序集標(biāo)識(shí)符 強(qiáng)命名程序集 程序集的私有方式部署 共享程序集和GAC 配置文件 延遲簽名,10.1 引用其他程序集,編譯器接收源代碼文件并生成名稱為程序集的輸出文件。在許多項(xiàng)目中,你會(huì)想使用來(lái)自其他程序集的類或類型。這些其他的程序集可能來(lái)自BCL,或來(lái)自一個(gè)第三方賣主,或你自己創(chuàng)建了它們。這些程序集稱為類庫(kù),而且它們的程序集文件的名稱通常以.dll擴(kuò)展名結(jié)尾而不是.exe擴(kuò)展名。,在Visual Studio中,可以用下面的方法把引用添加到項(xiàng)目:,選擇Solution Explorer并在該項(xiàng)目名下找到References目錄。 右鍵點(diǎn)擊References目錄并選擇Add Reference。 對(duì)于我們的程序,選擇Browse標(biāo)簽,瀏覽到包含SquareWidget類 定義的DLL文件,并選擇它。 點(diǎn)擊OK按鈕,引用就被加入到項(xiàng)目了。,mscorlib庫(kù),有一個(gè)類庫(kù),在前面的每一個(gè)示例中都幾乎使用它。它就是包含Console類的那個(gè)庫(kù)。Console類被定義在名稱為mscorlib的程序集中,在名稱為mscorlib.dll的文件里。然而,你不會(huì)看到這個(gè)程序集被列在References目錄中。,10.2 命名空間,命名空間把一組類型分組在一起并給它們一個(gè)名稱,稱為命名空間。下面展示了聲明一個(gè)命名空間的語(yǔ)法。聲明在大括號(hào)中間的所有類和其他類型的名稱都是命名空間的成員。 namespace SimpleNamespace TypeDeclarations ,注意關(guān)于命名空間名稱的兩個(gè)有趣的事情: 命名空間可以包含前綴。 公司名稱在命名空間名稱的開始。,10.2.1 命名空間名稱,關(guān)于命名空間名稱的一些要點(diǎn)如下: 命名空間名稱可以是任何有效標(biāo)識(shí)符。 命名空間名稱可以包含句點(diǎn)符號(hào),用于把類型組織成層次。 下面是建議的命名空間命名指南: 使用公司名開始命名空間名稱。 在公司名之后跟著技術(shù)名稱。 不要把命名空間命名為與類或類型相同的名稱。 例如: namespace AcmeWidgets.SuperWidget.SPDComponent class APDBase ,10.2.2 命名空間的補(bǔ)充,關(guān)于命名空間,有其他幾個(gè)要點(diǎn)應(yīng)該知道: 在命名空間內(nèi),每個(gè)類型名必須有別于所有其他類型。 命名空間內(nèi)的類型稱為命名空間的成員。 一個(gè)源文件可以包含任意數(shù)目的命名空間聲明,可以順序也可以嵌套。,10.2.3 命名空間跨文件伸展,命名空間不是封閉的。這意味著可以在該源文件的后面或另一個(gè)源文件中再次聲明它,以對(duì)它增加更多的類型聲明,10.2.4 嵌套命名空間,一個(gè)命名空間可以是另一個(gè)命名空間的成員。有兩種方法聲明一個(gè)嵌套的命名空間: 原文嵌套:可以把命名空間的聲明放在一個(gè)封裝的命名空間聲明體內(nèi)部,從而創(chuàng)建一個(gè)嵌套的命名空間。 分離的聲明:也可以為嵌套命名空間創(chuàng)建分離的聲明,但必須在聲明中使用它的完全限定名稱。,10.3 using指令,有兩個(gè)編譯指令,可以使你避免不得不使用完全限定名:using命名空間指令和using別名指令: 它們必須放在源文件的頂端,在任何類型聲明之前。 它們應(yīng)用于當(dāng)前源文件中的所有命名空間。,10.3.1 using命名空間指令,using命名空間指令通知編譯器你將要使用來(lái)自某個(gè)指定命名空間的類型。然而你可以繼續(xù),并使用簡(jiǎn)單類名而不必全路徑修飾它們。 using命名空間指令由關(guān)鍵字using跟著一個(gè)命名空間標(biāo)識(shí)符組成: using System;,10.3.2 using別名指令,Using別名指令允許起一個(gè)別名給: 命名空間 命名空間內(nèi)的一個(gè)類型 例如,下面的代碼展示了兩個(gè)using別名指令的使用: using Syst = System; using SC = System.Console;,10.4 程序集的結(jié)構(gòu),程序集不包含本地機(jī)器代碼,而是公共中間語(yǔ)言代碼。它還包含實(shí)時(shí)編譯器(JIT)在運(yùn)行時(shí)轉(zhuǎn)換CIL到本機(jī)代碼所需的一切,包括對(duì)它所引用的其他程序集的引用。程序集的擴(kuò)展名通常為.exe或.dll。 大部分程序集由一個(gè)單獨(dú)的文件構(gòu)成,它的四個(gè)主要部分: 程序集的清單:程序集名稱標(biāo)識(shí)符、組成程序集的文件列表、一個(gè)指示程序集中內(nèi)容在哪里的地圖、關(guān)于引用的其他程序集的信息。 類型元數(shù)據(jù)部分包含該程序集中定義的所有類型的信息。 CIL部分包含程序集的所有中間代碼。 資源部分是可選的,但可以包含圖形和語(yǔ)言資源。 說(shuō)明:盡管大部分程序集由單文件組成,但有些也有多個(gè)文件。,10.5 程序集標(biāo)識(shí)符,在.NET框架中,程序集的文件名不像在其他操作系統(tǒng)和環(huán)境中那么重要,更重要的是程序集的標(biāo)識(shí)符(identity)。程序集的標(biāo)識(shí)符有四個(gè)組成部分,它們一起唯一標(biāo)識(shí)了改程序集: 簡(jiǎn)單名:這只是不帶文件擴(kuò)展名的文件名。 版本號(hào):它由四個(gè)句點(diǎn)分開的整數(shù)字符組成。 文化信息:它是一個(gè)字符串,由25個(gè)字符組成,代表一種語(yǔ)言,或代表一種語(yǔ)言和一個(gè)國(guó)家或地區(qū)。 公鑰:這個(gè)128字節(jié)字符串應(yīng)該是生產(chǎn)該程序集的公司唯一的。,10.6 強(qiáng)命名程序集,強(qiáng)命名(strongly named)程序集有一個(gè)唯一的數(shù)字簽名依附于它。強(qiáng)命名程序集比沒(méi)有強(qiáng)名稱的程序集更加安全,這是由于以下原因: 強(qiáng)名稱唯一標(biāo)識(shí)了程序集。 沒(méi)有CLR安全組件來(lái)捕獲更改,帶槍名稱的程序集的內(nèi)容不能被改變。 弱命名程序集是沒(méi)有被強(qiáng)命名的程序集。由于弱命名程序集沒(méi)有數(shù)字簽名,它天生是不安全的。,創(chuàng)建強(qiáng)命名程序集,要使用Visual Studio 2008強(qiáng)命名一個(gè)程序集,必須有一份公鑰/私鑰對(duì)文件的拷貝。如果沒(méi)有密鑰文件,可以讓Visual Studio產(chǎn)生一個(gè)。可以實(shí)行以下步驟: (1)打開工程的屬性。 (2)選擇簽名頁(yè)。 (3)選擇為程序集復(fù)選框簽名并輸入密鑰文件的位置,10.7 程序集的私有方式部署,如果應(yīng)用程序不需要其他程序集(比如DLL),或如果所需的DLL在同一目錄下,那么程序應(yīng)該會(huì)就在它所在的地方良好工作。這種方法部署的程序集稱為私有程序集,而且這種部署方法稱為復(fù)制文件(XCopy)部署。 關(guān)于私有程序集部署的一些重要事情如下: 私有程序集所在的目錄被稱為應(yīng)用程序目錄。 私有程序集可以是強(qiáng)命名的也可以是如命名的。 沒(méi)有必要在注冊(cè)表中注冊(cè)組件。 要卸載一個(gè)私有程序集,只要從文件系統(tǒng)中刪除它即可。,10.8 共享程序集和GAC,私有程序集是非常有用的,但有時(shí)你會(huì)想把一個(gè)DLL放在一個(gè)中心位置,這樣一個(gè)單獨(dú)的拷貝就能被系統(tǒng)中其他的程序集共享。.NET有這樣的貯藏庫(kù),稱為全局程序集緩存(GAC)。放進(jìn)GAC的程序集稱為共享程序集。關(guān)于GAC的一些重要內(nèi)容如下: 只有強(qiáng)命名程序集能被添加到GAC。 雖然GAC的早期版本只接受帶.dlll擴(kuò)展名的文件,現(xiàn)在也可以添加帶.exe擴(kuò)展名的程序集了。 GAC的位置在名稱Assembly的子目錄下 ,在Windows系統(tǒng)目錄中。,10.8.1 把程序集安裝到GAC,當(dāng)試圖安裝一個(gè)程序集到GAC時(shí),CLR的安全組件首先必須檢驗(yàn)程序集上的數(shù)字簽名是否有效。如果沒(méi)有數(shù)據(jù)簽名,或它是無(wú)效的,系統(tǒng)將不會(huì)把它安裝到GAC。 Gacutil.exe命令行工具允許從GAC添加或刪除程序集,并列出GAC包含的程序集。它的三個(gè)最有用的參數(shù)標(biāo)記如下所示 /i:把一個(gè)程序集插入GAC。 /u:從GAC卸載一個(gè)程序集。 /l:列出GAC中的程序集。,10.8.2 GAC內(nèi)的并肩執(zhí)行,在GAC中可以有許多不同的程序集,它們有相同的文件名。雖然它們有相同的文件名,它們是不同的程序集而且在GAC中完美地共存。這使不同的應(yīng)用程序在同一時(shí)間很容易使用不同版本的同一DLL,因?yàn)樗鼈兪菐Р煌臉?biāo)識(shí)符的不同程序集。這被稱為并肩執(zhí)行(side-by-side Execution)。,10.9 配置文件,配置文件含有關(guān)于應(yīng)用程序的信息,供CLR在運(yùn)行時(shí)使用。它們可以指示CLR去做這樣的事情,比如使用一個(gè)不同版本的DLL,或搜索程序引用的DLL時(shí)在附加目錄中查找。 配置文件由XML代碼組成,并不包含C#代碼。它們的一種用途是更新一個(gè)應(yīng)用程序集以使用新版本的DLL。,10.10 延遲簽名,公司小心地保護(hù)它們官方的公鑰/私鑰對(duì)是十分重要的,否則,如果不靠的人得到了它,就可以發(fā)布偽裝成該公司的代碼。 有一種修改了的賦值強(qiáng)命名的形式,稱為延遲簽名(delayed signing)或部分簽名(partial signing),它克服了這些問(wèn)題,而且沒(méi)有釋放對(duì)私鑰的訪問(wèn)。 要?jiǎng)?chuàng)建一個(gè)延遲簽名的程序集,必須做兩件事情: 第一,創(chuàng)建一個(gè)密鑰文件的拷貝,它只有公鑰而不是公鑰/私鑰對(duì)。 下一步,為程序集范圍內(nèi)的源代碼添加一個(gè)名稱為DelaySignAttribute的附加特性,并把它的值設(shè)為true。,命名空間的優(yōu)點(diǎn) 程序集的結(jié)構(gòu) 類型元數(shù)據(jù)的功能(智能感知、對(duì)象瀏覽器、 調(diào)試等都用到元數(shù)據(jù)) CIL的作用(語(yǔ)言、平臺(tái)無(wú)關(guān)性),什么是程序集(Assembly) 是一個(gè)以公共語(yǔ)言運(yùn)行庫(kù)為宿主的、版本化的、自我描述的二進(jìn)制文件。 不同以往的win32(.exe和.dll

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論