国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

.NET Framework 之 Common Language Runtime

2024-07-10 12:59:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
clr是什么?
上次講到運(yùn)行在.net framework中的代碼叫做managed code,反之叫做unmanaged code。相比unmanaged code,managed code 有很多好處,比如可以用多種編程語(yǔ)言編寫(xiě)、提高安全性、易于版本控制和程序發(fā)布等等。這些都是由clr提供的。但也有一些不利點(diǎn),最容易想到的就是代碼運(yùn)行速度問(wèn)題了。

要為managed code提供以上功能,clr必須知道代碼中的數(shù)據(jù)類(lèi)型、類(lèi)和與她有關(guān)連的assembly的定義。這些信息叫做metadata,而metadata就包含在代碼中的某個(gè)部分(編譯后)。clr利用這個(gè)metadata加載代碼段、管理內(nèi)存、執(zhí)行方法調(diào)用等操作。

.net出來(lái)以前,在不同編程語(yǔ)言之間共享原代碼,簡(jiǎn)直是不可能的事情。因?yàn)槊總€(gè)編程語(yǔ)言定義的數(shù)據(jù)類(lèi)型不同,而且語(yǔ)法也不同。微軟大師們想到了把數(shù)據(jù)類(lèi)型統(tǒng)一的好辦法。這個(gè)技術(shù)叫cts(common type system)?,F(xiàn)在做項(xiàng)目開(kāi)發(fā)就比較簡(jiǎn)單了(用不同語(yǔ)言),比如一個(gè)項(xiàng)目組里有會(huì)用vb的,會(huì)用c++的??赡芤郧暗姆椒ㄊ前褍蓚€(gè)人之間互相調(diào)用的功能寫(xiě)成dll或com。但現(xiàn)在不用這么麻煩了,你直接就可以使用其他語(yǔ)言編寫(xiě)的代碼了。具體一點(diǎn),用vb.net可以繼承c++.net寫(xiě)的類(lèi),反過(guò)來(lái)也是可以的。

我們安裝軟件的時(shí)候常碰到這樣的提示 - 系統(tǒng)中的組件比要安裝的組件的新,你要替換還是保留?是不是很討厭?!現(xiàn)在開(kāi)始你就用.net吧,她不會(huì)因?yàn)檫@個(gè)“小”問(wèn)題而打擾你了。因?yàn)槊總€(gè)代碼都包含與她相關(guān)的metadata,clr會(huì)根據(jù)這個(gè)信息來(lái)管理代碼的不同版本。而且因?yàn)椴挥冒汛a的信息注冊(cè)到注冊(cè)表,所以可以用x-copy的方式安裝代碼(就是簡(jiǎn)單的拷貝粘貼了)。

是用vb做好呢?還是用c++做好呢?這些問(wèn)題是我們做項(xiàng)目的時(shí)候常要考慮的問(wèn)題。但在.net用什么編程語(yǔ)言已經(jīng)變得不重要了(但還是有一定的差別,在特定項(xiàng)目中),因?yàn)閏lr提供cts(還有base class library),而且都運(yùn)行在clr上面。在.net中vb,c++等語(yǔ)言都有了相當(dāng)多的提高,而且有了新的語(yǔ)言c#。c#已經(jīng)申請(qǐng)了標(biāo)準(zhǔn)而且通過(guò),可想而知她的powe了。大家知道borland也發(fā)布了相關(guān)的開(kāi)發(fā)工具c# builder。

做個(gè)小結(jié)

1、.net代碼都包含與自己相關(guān)的信息叫做metadata。

2、clr提供cts(cls也有功勞),所以可以在不同編程語(yǔ)言之間共享原代碼。

3、 用metadata管理代碼信息(不是利用注冊(cè)表),所以代碼易于安裝。

4、 使用統(tǒng)一的數(shù)據(jù)類(lèi)型和類(lèi)庫(kù),所以編程語(yǔ)言的選擇變得不重要了,而且易于團(tuán)隊(duì)開(kāi)發(fā)。

代碼在clr中的運(yùn)行過(guò)程

1、選擇編譯器

首先clr選擇編譯器,因?yàn)閏lr中可以運(yùn)行不同語(yǔ)言開(kāi)發(fā)出來(lái)的代碼。

2、把代碼編譯成msil

clr利用選擇的編譯器生成msil(microsoft intermediate language)和metadata把她們加載到pe(portable executable file)。

msil:解釋語(yǔ)言,包含代碼信息,讓jit易于編譯成機(jī)器語(yǔ)言。與操作系統(tǒng)和編程語(yǔ)言無(wú)關(guān)。

pe:可執(zhí)行文件格式,windows就是dll或exe了。

3、用jit編譯器把msil編譯成機(jī)器語(yǔ)言

有兩種方式一種是只編譯當(dāng)前執(zhí)行的代碼段,另一種是把整個(gè)代碼一次性編譯。jit會(huì)檢測(cè)代碼的安全性。

4、 執(zhí)行代碼

代碼首次調(diào)用就會(huì)編譯成機(jī)器代碼,再次調(diào)用的時(shí)候就不再重新編譯了。

相關(guān)工具

-msil生成器 - msil assembler(ilasm.exe)

-msil反編譯器 - msil assembler(ildasm.exe)

使用法

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconmsilassemblerilasmexe.asp

相關(guān)資料

-pe結(jié)構(gòu)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconmetadatapefilestructure.asp


參考資料

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsourcecodelanguage.asp


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 渭南市| 宁阳县| 襄汾县| 大田县| 扬中市| 修武县| 嵩明县| 龙川县| 泰顺县| 彰化县| 商水县| 博湖县| 延吉市| 乌审旗| 莒南县| 黔江区| 疏勒县| 宁蒗| 唐海县| 密山市| 横山县| 旌德县| 孙吴县| 库尔勒市| 安国市| 凤庆县| 福安市| 天台县| 区。| 鄂托克旗| 南投县| 曲沃县| 保靖县| 军事| 靖宇县| 石狮市| 牡丹江市| 赤壁市| 兴宁市| 阜新市| 南宫市|