六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

.net框架程序設(shè)計讀書筆記二(Microsoft .net 框架開發(fā)平臺體系架構(gòu))

[摘要]第一章:Microsoft .net 框架開發(fā)平臺體系架構(gòu) 本章的目標(biāo):對.net框架體系架構(gòu)有一個總體的認(rèn)識,并對.net框架中出現(xiàn)的一些新的技術(shù)和術(shù)語有一個基本的了解。 1.1 將源代碼編...
第一章:Microsoft .net 框架開發(fā)平臺體系架構(gòu)



本章的目標(biāo):對.net框架體系架構(gòu)有一個總體的認(rèn)識,并對.net框架中出現(xiàn)的一些新的技術(shù)和術(shù)語有一個基本的了解。



1.1 將源代碼編譯為托管模塊

關(guān)于編程語言的選擇

.net框架的核心是通用語言運行時,顧名思義它是一個可被各種不同的編程語言所使用的運行時。CLR的很多特性可用于所有面向它的編程語言,如果CLR用異常來報告錯誤,那么所有面向它的語言都將通過異常來得到錯誤報告。如果CLR允許我們創(chuàng)建線程,那么所有面向它的語言也都可以創(chuàng)建線程。

實際上CLR在運行時對開發(fā)人員用何種編程語言來完成源代碼一無所知。這意味著我們應(yīng)該選擇那些能夠最容易表達(dá)我們意圖的編程語言。我們可以用任何自己喜歡的語言(面向CLR的)來編寫代碼。

不同的編程語言允許我們使用不同的語法進(jìn)行開發(fā),不同的語法對于我們解決各種問題的難易程度是有影響的,例如:對于數(shù)學(xué)或者金融應(yīng)用,彩用APL語法更快。



微軟已經(jīng)創(chuàng)建了以下幾種面向CLR的編譯器 :

托管擴(kuò)展C++

C#

Visual Basic

Jscript

J#

IL匯編器



我們可以用任何支持CLR的編程語言來創(chuàng)建源代碼文件。然后用相應(yīng)的編譯器來做語法檢查和源代碼分析。最后生成托管橡塊。



托管模塊



托管模塊是一個需要CLR才能執(zhí)行的標(biāo)準(zhǔn)Windows可移植可執(zhí)行(Portable executable,簡稱PE)文件。



托管模塊的組成部分:

l PE表頭

標(biāo)準(zhǔn)Windows PE文件表頭,類似于通用對像文件格式表頭。該表頭指出了文件的類型:GUI(圖形用戶界面),CUI(控制臺用戶界面),或者DLL. 此處的DLl并非我們理解的傳統(tǒng)的windows 動態(tài)鏈接庫文件,雖然都叫DLL,但,net平臺中的DLL指程序集文件的一種形式),該表頭還包含文件創(chuàng)建時間。對于包含CPU代碼的模塊,該表頭還會包含有關(guān)本地CPU代碼的一些信息



l CLR表頭

包含標(biāo)識托管模塊的一些信息(可以被CLR或者一些實用工具解析)。

1、 CLR版本號

2、 托管模塊入口點方法(Main方法)的元數(shù)據(jù)標(biāo)記

3、 托管模塊的元數(shù)據(jù)標(biāo)記

4、 資源

5、 強(qiáng)命名

6、 其他一些意義不是太大的信息的位置和尺寸



l 元數(shù)據(jù)

每個托管模塊都包含有一些元數(shù)據(jù)表。元數(shù)據(jù)表主要分兩種,一種用于描述源代碼中定義的類型和成員,一種用于描述源代碼中的引用類型和成員。



l 中間語言(IL)和代碼

編譯器在編譯源代碼是產(chǎn)生的指令。CLR在運行時會將IL代碼編譯成本地CPU指令



元數(shù)據(jù)(metadata)就是一個數(shù)據(jù)表的集合,在這些表中,其中一些用于描述托管模塊中所定義的內(nèi)容(比如所定義的類型和它們的成員,另外一些用于描述托管模塊中引用的內(nèi)容(比如被引用的類型和它們的成員)。元數(shù)據(jù)總是和包含IL代碼的的文件相關(guān)聯(lián)。



元數(shù)據(jù)的用處:

1、 省去了源代碼編譯時對頭文件和庫文件的需求,

2、 Visual Studio .Net可以利用元數(shù)據(jù)來輔助我們編寫代碼。智能感知就是這樣做的。

3、 可以序列化和反序列化

4、 垃圾收集器可以追蹤對像的生存期。





1.2 將托管模塊組合為程序集

CLR實際上并不和托管模塊打交道,它直接打交道的對象是程序集(assembly).程序集是一個抽象的概念,剛開始往往很難理解。首先,程序集是一個或多個托管模塊,以及一些資源文件的邏輯組合。其次,程序集是組件復(fù)用,以及實施安全策略和版本的最小單位。根據(jù)我們對編譯器和相關(guān)工具所做的選擇,程序集可以是一個文件或者多個文件。

默認(rèn)情況下,編譯器會將產(chǎn)生的托管模塊轉(zhuǎn)換為一個程序集。也就是說,c#編譯器產(chǎn)生的是一個我包含了清單的托管模。其中的清單表明程序集中僅包含一個文件。對于僅包含一個托管模塊,并且沒有資源(或者數(shù)據(jù))文件的項目來說,程序集就是托管模塊,而且在創(chuàng)建過程中,不需要執(zhí)行任何其他的步驟。

程序集中的模塊還包含它所引用的程序集的一些信息(如版本號信息)。這些信息使得一個程序集得以實現(xiàn)自描述(self-describing)。換句話說,CLR知道執(zhí)行一個程序集所需要的所有內(nèi)容,它不需要再在注冊表或者活動目錄中獲取額外的信息。因此,程序集的部署要比非托管組件的部署容易得多。

1.3加載通用語言運行時

一個程序集或者是一個可執(zhí)行應(yīng)用程序,或者是一個包含供可執(zhí)行應(yīng)用程序使用的一組類型(組件)的DLL。CLR負(fù)責(zé)管理包含在程序集中的代碼的執(zhí)行。這意味著宿主機(jī)器必須安裝.net框架。微軟已經(jīng)創(chuàng)建了一個可以將.net框架免費安裝到客戶機(jī)上的分發(fā)包。.net框架最終會和將來的Windows打包在一起,這樣我們就不需要將它和我們的程序集放在一起來發(fā)布了。

我們可以通過在%windir%\system32目錄下查找MSCorEE.dll文件來判斷一個機(jī)器中是否安裝了.NET框架。如果想確定一個機(jī)器中安裝了哪些版本的.NET框架,可以查看下面的注冊表鍵的子鍵:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ policy



當(dāng)生成一個EXE程序集時,編譯器/鏈接器會產(chǎn)生一些特殊的信息,并將它們嵌入到結(jié)果程序集的PE文件表頭及其各個組成文件的.text部分。當(dāng)EXE文件被調(diào)用時,這些特殊的信息將導(dǎo)致CLR被加載并初始化。CLR隨后會定位至應(yīng)勝程序的入口點方法,從面以此來啟動應(yīng)用程序。



類似地,如果是一個非托管應(yīng)用程序通過調(diào)用LoadLibrary來加載一個托管程序集,那么該托管程序集DLL的入口點函數(shù)也會知道去加載CLR來處理包含在其中的代碼。



托管EXE加載并初始化CLR的過程

1. MSCorEE檢查CLR表頭以獲得Main方法的元數(shù)據(jù)標(biāo)記。

2. MSCorEE 檢查Main方法的元數(shù)據(jù)以獲得其IL在托管EXE中的位置。

3. MSCorEE 將Main方法的IL編譯成本地CPU指令。

4. MSCorEE跳轉(zhuǎn)到Main方法編譯后的本地CPU指令上(使用主線程)

5. 應(yīng)用程序開始運行。



托管DLL的情形


主站蜘蛛池模板: 倩女还魂在线观看完整版免费 | 四虎成人免费 | 亚洲日本欧美日韩高观看 | 四虎www成人影院观看 | 先锋影音国产精品 | 日日摸夜夜添夜夜添97 | 天天碰天天摸天天操 | 日韩一区二区三区视频在线观看 | 香港全黄一级毛片在线播放 | 欧美一级欧美三级 | 欧美一级手机免费观看片 | 日比免费视频 | 日本高清在线一区 | 青青青青娱乐 | 亚洲欧美v国产一区二区 | 最新四虎4hu影库地址在线 | 日韩视频第二页 | 欧美一级淫片aaaaaaa视频 | 亚洲激情久久 | 中文字幕在线观看日本 | 天天爽天天干 | 午夜a级片 | 亚洲成av人片在线观看无码 | 欧美性猛交xxxx乱大交极品 | 亚洲福利秒拍一区二区 | 伊人网在线免费视频 | 亚洲欧美日韩综合久久久久 | 首页 亚洲 欧美 制服 丝腿 | 中文字幕在线有码高清视频 | 日韩高清免费在线观看 | 日本欧美一区二区三区在线观看 | 中文字幕在线乱码免费毛片 | 在线视频a | 亚洲日本视频在线 | 日本在线日本中文字幕日本在线视频播放 | 伊人狠狠| 亚洲成a人片在线不卡 | 午夜视频啪啪 | 日本一区二区视频在线观看 | 伊人网在线播放 | 影音先锋精品国产资源 |