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

首頁 > 開發(fā) > 綜合 > 正文

Wrox的C#高級(jí)編程第三版第一部分第一章(16~18頁

2024-07-21 02:18:30
字體:
供稿:網(wǎng)友
如果不同的可執(zhí)行代碼在同樣的進(jìn)程空間里運(yùn)行,那么顯然他們可以方便的共享數(shù)據(jù),因?yàn)槔碚撋纤麄兛梢灾苯釉L問彼此的數(shù)據(jù)。盡管理論上這樣是可行的,但是,在實(shí)際情況下clr會(huì)檢查每個(gè)運(yùn)行的代碼以保證這種情況不會(huì)發(fā)生,這樣就保證了代碼不會(huì)超出自己所擁有的區(qū)域執(zhí)行操作了。乍一看這似乎是不可能的,畢竟如果你不去實(shí)際運(yùn)行代碼你又怎樣知道代碼究竟是怎樣運(yùn)行的?

實(shí)際上,因?yàn)閕l擁有強(qiáng)大的類型安全機(jī)制,所以這樣做是可能的。在大多數(shù)情況下,除非代碼使用了不安全的特性,比如指針,否則數(shù)據(jù)類型就會(huì)保證內(nèi)存不會(huì)被不正當(dāng)?shù)脑L問。比如,.net數(shù)組類型會(huì)執(zhí)行邊界檢查以確保任何越界數(shù)組操作都是不允許的。如果一個(gè)運(yùn)行的應(yīng)用程序確實(shí)需要與不同的應(yīng)用程序域的另一個(gè)運(yùn)行的應(yīng)用程序通信或者共享數(shù)據(jù),那么它就必須通過調(diào)用.net的遠(yuǎn)程服務(wù)的方式實(shí)現(xiàn)。

這種驗(yàn)證代碼以確保代碼不可以超出應(yīng)用程序域訪問數(shù)據(jù)的機(jī)制就叫做內(nèi)存類型安全(不同于通過外部遠(yuǎn)程調(diào)用機(jī)制)。這樣處于一個(gè)進(jìn)程中的不同應(yīng)用程序域的類型安全代碼就可以安全運(yùn)行而互不干擾。


1.3.3.3 通過異常處理錯(cuò)誤

與java 和 c++所采用的異常處理機(jī)制一樣,.net framework也設(shè)計(jì)為采用這種方便的基于異常的錯(cuò)誤處理機(jī)制。c++開發(fā)者應(yīng)該注意到,由于同樣il有強(qiáng)大的輸入系統(tǒng),所以在il中以和c++同樣的方式使用異常并不會(huì)帶來性能損失。.net 和 c#還支持許多c++開發(fā)者期待的finally塊。

我們將要在第11章詳細(xì)討論異常。簡(jiǎn)單的說,異常處理的方法就是專門指定一塊代碼來作為異常處理例行程序負(fù)責(zé)處理特殊的異常情況,每一塊代碼都可以處理特定的錯(cuò)誤狀況(例如,一個(gè)文件沒有找到,或者某些操作被拒絕執(zhí)行)。這種特定的錯(cuò)誤狀況可以根據(jù)你的需要而定制,你可以定的條件很窄也可以很寬。異常處理體系結(jié)構(gòu)可以確保一旦有錯(cuò)誤情況發(fā)生,程序就會(huì)立即跳到異常處理例行程序中那個(gè)處理此特定情況的代碼塊處執(zhí)行。

異常處理體系結(jié)構(gòu)還提供了一個(gè)方便的辦法,你可以傳遞一個(gè)包含明確的異常信息的對(duì)象給一個(gè)異常處理例行程序。這個(gè)對(duì)象可能包含用戶的特定消息和具體是代碼的什么地方檢測(cè)到了異常。

當(dāng)異常發(fā)生時(shí),大多數(shù)異常處理體系結(jié)構(gòu),包括程序流控制,都是由高級(jí)語言處理的(例如c#, visual basic .net, c++),而不被任何特定的il命令所支持。例如,c#利用代碼塊try { }, catch{ }, 和 finally{ }來處理異常(詳細(xì)情況請(qǐng)參看第11章)。

但是,.net也確實(shí)提供了一個(gè)基礎(chǔ)結(jié)構(gòu),讓所有以.net為目標(biāo)運(yùn)行平臺(tái)的編譯器支持異常處理。特別是,.net提供了一個(gè).net類的集合用來專門表示異常,并且語言互操作性允許異常處理代碼處理拋出的異常對(duì)象而不管處理異常的代碼使用什么語言編寫的。這種語言無關(guān)性是c++ 和 java的異常處理機(jī)制都不能實(shí)現(xiàn)的,但是在com的錯(cuò)誤處理機(jī)制種有一定的體現(xiàn),這包括從方法中返回錯(cuò)誤代碼以及傳遞錯(cuò)誤對(duì)象。在不同的語言中保持異常處理的一致性對(duì)多語言開發(fā)來說是至關(guān)重要的一個(gè)環(huán)節(jié)。

1.3.3.4 屬性的使用

用c++編寫com組件的開發(fā)者一定對(duì)屬性這個(gè)特性很熟悉(通過他們使用microsoft’s com interface definition language [idl])。屬性最初的用意是為了給編譯器提供關(guān)于某些程序相關(guān)的額外信息使用。

屬性是由.net支持的,因此現(xiàn)在c++, c#, 和 visual basic .net肯定也都支持。但是,.net的屬性有所創(chuàng)新,那就是它提供了一種機(jī)制,使你可以在你的源代碼中定義你自己的屬性。這些用戶定義的屬性將會(huì)被放置在數(shù)據(jù)類型或者方法所對(duì)應(yīng)的元數(shù)據(jù)中。這些元數(shù)據(jù)可以用于文檔的編制,他們可以和反射技術(shù)同時(shí)使用來實(shí)現(xiàn)基于屬性的執(zhí)行設(shè)計(jì)任務(wù)。另外,與.net的語言無關(guān)性的原理一樣,可以在源代碼中用一種語言定義屬性而用另一種語言將其讀出。

我們將要在第10章討論屬性。

1.4 程序集

一個(gè)程序集是邏輯單元,它包含為.net framework所編譯的代碼。在這里我們不希望過多的關(guān)注程序集的細(xì)節(jié),因?yàn)樵诘?3章我們將要詳細(xì)討論,但是在這里概括他的要點(diǎn)。

程序集是完全自我描述的,而且是一個(gè)邏輯上的單元而不是物理上的,這也就表示他可以本存儲(chǔ)在不只一個(gè)文件里(實(shí)際上動(dòng)態(tài)程序集是存儲(chǔ)在內(nèi)存里的,而不是文件里)。如果一個(gè)程序集被存儲(chǔ)在多個(gè)文件里,那么就會(huì)有一個(gè)主文件包含主要的入口點(diǎn)并且描述程序集中的其他文件。

應(yīng)該注意到,對(duì)于可執(zhí)行代碼和庫代碼來說,他們的程序集的結(jié)構(gòu)都是一樣的。他們其中的唯一差別就是,可執(zhí)行代碼的程序集里包含一個(gè)主要程序出口點(diǎn),而庫代碼的程序集里沒有。

程序集的一個(gè)重要特性使它包含對(duì)應(yīng)代碼中定義的描述類型和方法元數(shù)據(jù)。但是,一個(gè)程序集也包含一些描述程序集自身元數(shù)據(jù)。這些包含在一個(gè)叫做程序集清單的程序集元數(shù)據(jù),可以用來檢查程序集的版本信息以及完整性。

注意:ildasm,一個(gè)基于windows的使用工具,可以用來檢查程序集的內(nèi)容,包括程序集的清單和元數(shù)據(jù)。我們將在第13章討論ildasm。

事實(shí)上程序集包含程序的元數(shù)據(jù)意味著應(yīng)用程序或者其他的程序集調(diào)用別的代碼時(shí),有了程序集所描述的信息,就不需要為了如何使用程序集而查詢注冊(cè)表或者其他的數(shù)據(jù)源了。相對(duì)于老的com的做法,現(xiàn)在的這種做法有重大的突破。在以前的老方法中,組件的guids和借口必須從注冊(cè)表中獲得,而且在某些情況下,方法和屬性的細(xì)節(jié)還需要從類型庫中讀取。


  • 本文來源于網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • 發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 蕲春县| 磐石市| 七台河市| 昆明市| 鄂州市| 沛县| 巴青县| 阿巴嘎旗| 班玛县| 台东市| 潮州市| 南康市| 高雄市| 普定县| 梁平县| 景泰县| 通辽市| 兰西县| 金平| 荔浦县| 广州市| 德昌县| 县级市| 河东区| 定结县| 紫金县| 白山市| 昌江| 灵台县| 柘荣县| 青阳县| 华阴市| 丰镇市| 攀枝花市| 凤山市| 华宁县| 中江县| 托克逊县| 夹江县| 沅江市| 扬中市|