C#using的本質(zhì)及使用詳解_第1頁
C#using的本質(zhì)及使用詳解_第2頁
C#using的本質(zhì)及使用詳解_第3頁
C#using的本質(zhì)及使用詳解_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

第C#using的本質(zhì)及使用詳解目錄01.點(diǎn)明觀點(diǎn)02.C#中,using的兩個作用03.using如何實(shí)現(xiàn)資源釋放04.實(shí)踐探索05.總結(jié)

01.點(diǎn)明觀點(diǎn)

C#中,非托管資源使用之后必須釋放,而using()是使用非托管資源的最佳方式,可以確保資源在代碼塊結(jié)束之后被正確釋放,并且代碼更簡潔。

這里說的非托管資源指的是實(shí)現(xiàn)IDisposable或IAsyncDisposable接口的類。

using是如何實(shí)現(xiàn)資源釋放?本文將予以解答。

02.C#中,using的兩個作用

第一種:引入命名空間

用法如下:

usingSystem.Text;

usings=System.Text;//為命名空間定義別名

usingstaticSystem.Math;//引入類型靜態(tài)成員

globalusingSystem.Math;//全局引入

第二種:聲明一個對象,并確保該對象在代碼塊執(zhí)行完之后被釋放(Dispose())。

這里主要對第二種用法進(jìn)行分析。

03.using如何實(shí)現(xiàn)資源釋放

通常,我們以下面的形式聲明一個非托管資源,當(dāng)代碼塊執(zhí)行完之后,資源會自動釋放,那程序是如何做到的呢?

using(varfile=File.Open("filePath",FileMode.OpenOrCreate))

//dosomething

說起來也簡單:

using(...)語句經(jīng)編譯器編譯之后,轉(zhuǎn)換了try{...}finally{...}

上面的代碼,經(jīng)程序編譯后的代碼如下:

FileStreamfile=File.Open("filePath",FileMode.OpenOrCreate);

//dosomething

finally

if(file!=null)

((IDisposable)file).Dispose();

兩段代碼的運(yùn)行結(jié)果是一樣的,對比之下,很明顯,使用using()的代碼更簡潔。

04.實(shí)踐探索

實(shí)踐出真知,我們通過一個例子,使用反編譯工具(ILSpy或ILDasm)查看生成的DLL,進(jìn)行驗(yàn)證。

首先,定義一個實(shí)現(xiàn)了IDisposable接口的類。當(dāng)然也可以使用.NET中內(nèi)置的類,這里采用自定義類是為了驗(yàn)證,只要是實(shí)現(xiàn)了IDisposable接口的類,都可以使用這種方式。

然后,使用using創(chuàng)建資源對象。

最后,查看編譯后生成的IL代碼文件,可以看到確實(shí)如上面所說,using(...)語句經(jīng)編譯器編譯之后,轉(zhuǎn)換了try{...}finally{...},并且在finally{}中完成了對Dispose()方法的調(diào)用。

至此,using()如何完成對非托管資源的釋放,就很清楚了。

05.總結(jié)

using()語句編譯后生成try{...}finally{...}語句,進(jìn)而確保資源釋放。using()是程序中使用非托管資源的最佳方式。using()的本質(zhì)是C#中的語法糖。

糖讓人快樂,同樣語法糖也能讓編程變得快樂,類似using()的語法糖,可以簡化代碼,確保必要邏輯的正確執(zhí)行;糖只是調(diào)味劑,同樣語法糖也只是簡化編碼,核心業(yè)務(wù)邏輯,還需要開發(fā)人員完成。

using的用法很簡單,在合適的場

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論