




已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第10章 命名空間和程序集,本章內(nèi)容,引用其他程序集 命名空間 Using指令 程序集的結(jié)構(gòu) 程序集標識符 強命名程序集 程序集的私有方式部署 共享程序集和GAC 配置文件 延遲簽名,10.1 引用其他程序集,編譯器接收源代碼文件并生成名稱為程序集的輸出文件。在許多項目中,你會想使用來自其他程序集的類或類型。這些其他的程序集可能來自BCL,或來自一個第三方賣主,或你自己創(chuàng)建了它們。這些程序集稱為類庫,而且它們的程序集文件的名稱通常以.dll擴展名結(jié)尾而不是.exe擴展名。,在Visual Studio中,可以用下面的方法把引用添加到項目:,選擇Solution Explorer并在該項目名下找到References目錄。 右鍵點擊References目錄并選擇Add Reference。 對于我們的程序,選擇Browse標簽,瀏覽到包含SquareWidget類 定義的DLL文件,并選擇它。 點擊OK按鈕,引用就被加入到項目了。,mscorlib庫,有一個類庫,在前面的每一個示例中都幾乎使用它。它就是包含Console類的那個庫。Console類被定義在名稱為mscorlib的程序集中,在名稱為mscorlib.dll的文件里。然而,你不會看到這個程序集被列在References目錄中。,10.2 命名空間,命名空間把一組類型分組在一起并給它們一個名稱,稱為命名空間。下面展示了聲明一個命名空間的語法。聲明在大括號中間的所有類和其他類型的名稱都是命名空間的成員。 namespace SimpleNamespace TypeDeclarations ,注意關(guān)于命名空間名稱的兩個有趣的事情: 命名空間可以包含前綴。 公司名稱在命名空間名稱的開始。,10.2.1 命名空間名稱,關(guān)于命名空間名稱的一些要點如下: 命名空間名稱可以是任何有效標識符。 命名空間名稱可以包含句點符號,用于把類型組織成層次。 下面是建議的命名空間命名指南: 使用公司名開始命名空間名稱。 在公司名之后跟著技術(shù)名稱。 不要把命名空間命名為與類或類型相同的名稱。 例如: namespace AcmeWidgets.SuperWidget.SPDComponent class APDBase ,10.2.2 命名空間的補充,關(guān)于命名空間,有其他幾個要點應(yīng)該知道: 在命名空間內(nèi),每個類型名必須有別于所有其他類型。 命名空間內(nèi)的類型稱為命名空間的成員。 一個源文件可以包含任意數(shù)目的命名空間聲明,可以順序也可以嵌套。,10.2.3 命名空間跨文件伸展,命名空間不是封閉的。這意味著可以在該源文件的后面或另一個源文件中再次聲明它,以對它增加更多的類型聲明,10.2.4 嵌套命名空間,一個命名空間可以是另一個命名空間的成員。有兩種方法聲明一個嵌套的命名空間: 原文嵌套:可以把命名空間的聲明放在一個封裝的命名空間聲明體內(nèi)部,從而創(chuàng)建一個嵌套的命名空間。 分離的聲明:也可以為嵌套命名空間創(chuàng)建分離的聲明,但必須在聲明中使用它的完全限定名稱。,10.3 using指令,有兩個編譯指令,可以使你避免不得不使用完全限定名:using命名空間指令和using別名指令: 它們必須放在源文件的頂端,在任何類型聲明之前。 它們應(yīng)用于當前源文件中的所有命名空間。,10.3.1 using命名空間指令,using命名空間指令通知編譯器你將要使用來自某個指定命名空間的類型。然而你可以繼續(xù),并使用簡單類名而不必全路徑修飾它們。 using命名空間指令由關(guān)鍵字using跟著一個命名空間標識符組成: using System;,10.3.2 using別名指令,Using別名指令允許起一個別名給: 命名空間 命名空間內(nèi)的一個類型 例如,下面的代碼展示了兩個using別名指令的使用: using Syst = System; using SC = System.Console;,10.4 程序集的結(jié)構(gòu),程序集不包含本地機器代碼,而是公共中間語言代碼。它還包含實時編譯器(JIT)在運行時轉(zhuǎn)換CIL到本機代碼所需的一切,包括對它所引用的其他程序集的引用。程序集的擴展名通常為.exe或.dll。 大部分程序集由一個單獨的文件構(gòu)成,它的四個主要部分: 程序集的清單:程序集名稱標識符、組成程序集的文件列表、一個指示程序集中內(nèi)容在哪里的地圖、關(guān)于引用的其他程序集的信息。 類型元數(shù)據(jù)部分包含該程序集中定義的所有類型的信息。 CIL部分包含程序集的所有中間代碼。 資源部分是可選的,但可以包含圖形和語言資源。 說明:盡管大部分程序集由單文件組成,但有些也有多個文件。,10.5 程序集標識符,在.NET框架中,程序集的文件名不像在其他操作系統(tǒng)和環(huán)境中那么重要,更重要的是程序集的標識符(identity)。程序集的標識符有四個組成部分,它們一起唯一標識了改程序集: 簡單名:這只是不帶文件擴展名的文件名。 版本號:它由四個句點分開的整數(shù)字符組成。 文化信息:它是一個字符串,由25個字符組成,代表一種語言,或代表一種語言和一個國家或地區(qū)。 公鑰:這個128字節(jié)字符串應(yīng)該是生產(chǎn)該程序集的公司唯一的。,10.6 強命名程序集,強命名(strongly named)程序集有一個唯一的數(shù)字簽名依附于它。強命名程序集比沒有強名稱的程序集更加安全,這是由于以下原因: 強名稱唯一標識了程序集。 沒有CLR安全組件來捕獲更改,帶槍名稱的程序集的內(nèi)容不能被改變。 弱命名程序集是沒有被強命名的程序集。由于弱命名程序集沒有數(shù)字簽名,它天生是不安全的。,創(chuàng)建強命名程序集,要使用Visual Studio 2008強命名一個程序集,必須有一份公鑰/私鑰對文件的拷貝。如果沒有密鑰文件,可以讓Visual Studio產(chǎn)生一個??梢詫嵭幸韵虏襟E: (1)打開工程的屬性。 (2)選擇簽名頁。 (3)選擇為程序集復(fù)選框簽名并輸入密鑰文件的位置,10.7 程序集的私有方式部署,如果應(yīng)用程序不需要其他程序集(比如DLL),或如果所需的DLL在同一目錄下,那么程序應(yīng)該會就在它所在的地方良好工作。這種方法部署的程序集稱為私有程序集,而且這種部署方法稱為復(fù)制文件(XCopy)部署。 關(guān)于私有程序集部署的一些重要事情如下: 私有程序集所在的目錄被稱為應(yīng)用程序目錄。 私有程序集可以是強命名的也可以是如命名的。 沒有必要在注冊表中注冊組件。 要卸載一個私有程序集,只要從文件系統(tǒng)中刪除它即可。,10.8 共享程序集和GAC,私有程序集是非常有用的,但有時你會想把一個DLL放在一個中心位置,這樣一個單獨的拷貝就能被系統(tǒng)中其他的程序集共享。.NET有這樣的貯藏庫,稱為全局程序集緩存(GAC)。放進GAC的程序集稱為共享程序集。關(guān)于GAC的一些重要內(nèi)容如下: 只有強命名程序集能被添加到GAC。 雖然GAC的早期版本只接受帶.dlll擴展名的文件,現(xiàn)在也可以添加帶.exe擴展名的程序集了。 GAC的位置在名稱Assembly的子目錄下 ,在Windows系統(tǒng)目錄中。,10.8.1 把程序集安裝到GAC,當試圖安裝一個程序集到GAC時,CLR的安全組件首先必須檢驗程序集上的數(shù)字簽名是否有效。如果沒有數(shù)據(jù)簽名,或它是無效的,系統(tǒng)將不會把它安裝到GAC。 Gacutil.exe命令行工具允許從GAC添加或刪除程序集,并列出GAC包含的程序集。它的三個最有用的參數(shù)標記如下所示 /i:把一個程序集插入GAC。 /u:從GAC卸載一個程序集。 /l:列出GAC中的程序集。,10.8.2 GAC內(nèi)的并肩執(zhí)行,在GAC中可以有許多不同的程序集,它們有相同的文件名。雖然它們有相同的文件名,它們是不同的程序集而且在GAC中完美地共存。這使不同的應(yīng)用程序在同一時間很容易使用不同版本的同一DLL,因為它們是帶不同的標識符的不同程序集。這被稱為并肩執(zhí)行(side-by-side Execution)。,10.9 配置文件,配置文件含有關(guān)于應(yīng)用程序的信息,供CLR在運行時使用。它們可以指示CLR去做這樣的事情,比如使用一個不同版本的DLL,或搜索程序引用的DLL時在附加目錄中查找。 配置文件由XML代碼組成,并不包含C#代碼。它們的一種用途是更新一個應(yīng)用程序集以使用新版本的DLL。,10.10 延遲簽名,公司小心地保護它們官方的公鑰/私鑰對是十分重要的,否則,如果不靠的人得到了它,就可以發(fā)布偽裝成該公司的代碼。 有一種修改了的賦值強命名的形式,稱為延遲簽名(delayed signing)或部分簽名(partial signing),它克服了這些問題,而且沒有釋放對私鑰的訪問。 要創(chuàng)建一個延遲簽名的程序集,必須做兩件事情: 第一,創(chuàng)建一個密鑰文件的拷貝,它只有公鑰而不是公鑰/私鑰對。 下一步,為程序集范圍內(nèi)的源代碼添加一個名稱為DelaySignAttribute的附加特性,并把它的值設(shè)為true。,命名空間的優(yōu)點 程序集的結(jié)構(gòu) 類型元數(shù)據(jù)的功能(智能感知、對象瀏覽器、 調(diào)試等都用到元數(shù)據(jù)) CIL的作用(語言、平臺無關(guān)性),什么是程序集(Assembly) 是一個以公共語言運行庫為宿主的、版本化的、自我描述的二進制文件。 不同以往的win32(.exe和.dll
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖書館可持續(xù)發(fā)展戰(zhàn)略研究考核試卷
- 煙草包裝設(shè)備的節(jié)能驅(qū)動系統(tǒng)設(shè)計考核試卷
- 網(wǎng)絡(luò)犯罪預(yù)防與應(yīng)對考核試卷
- 環(huán)境污染治理與環(huán)境影響評價制度考核試卷
- 2025簡易合同聘請個人廚師模板
- 2025跨國租賃合同(2)范文
- 2025存量房買賣標準格式合同
- 2025年出國打工者的合法權(quán)益應(yīng)當?shù)玫椒杀U?本案中合同的性質(zhì)是雇傭合同還是中介合同
- 中國糖尿病足診治指南課件
- 宿遷生物質(zhì)能電廠工程施工組織設(shè)計
- (二模)2025年深圳市高三年級第二次調(diào)研考試地理試卷(含標準答案)
- 壓花藝術(shù)-發(fā)現(xiàn)植物之美智慧樹知到期末考試答案章節(jié)答案2024年華南農(nóng)業(yè)大學(xué)
- 剪力墻平法識圖講義(PPT格式105)
- 北京中考英語詞匯表(1600詞匯)
- 專業(yè)工程分包業(yè)主審批表
- 藥劑科終止妊娠藥品管理制度
- 除草劑分類和使用方法
- 中遠集團養(yǎng)老保險工作管理程序
- 留守兒童幫扶記錄表
- 變電站第二種工作票
- 煤礦機電運輸專業(yè)質(zhì)量標準化管理制度
評論
0/150
提交評論