C# using()的使用方法
01.點(diǎn)明觀點(diǎn)
C#中,非托管資源使用之后必須釋放,而using()是使用非托管資源的最佳方式,可以確保資源在代碼塊結(jié)束之后被正確釋放,并且代碼更簡(jiǎn)潔。
這里說的非托管資源指的是實(shí)現(xiàn)IDisposable或IAsyncDisposable接口的類。
using是如何實(shí)現(xiàn)資源釋放?本文將予以解答。
02.C#中,using的兩個(gè)作用
第一種:引入命名空間
用法如下:
using System.Text; using s = System.Text; //為命名空間定義別名 using static System.Math; //引入類型靜態(tài)成員 global using System.Math; //全局引入
第二種:聲明一個(gè)對(duì)象,并確保該對(duì)象在代碼塊執(zhí)行完之后被釋放(Dispose())。
這里主要對(duì)第二種用法進(jìn)行分析。
03.using如何實(shí)現(xiàn)資源釋放
通常,我們以下面的形式聲明一個(gè)非托管資源,當(dāng)代碼塊執(zhí)行完之后,資源會(huì)自動(dòng)釋放,那程序是如何做到的呢?
using (var file = File.Open("filePath", FileMode.OpenOrCreate))
{
//do something
}
說起來也簡(jiǎn)單:
using(...)語句經(jīng)編譯器編譯之后,轉(zhuǎn)換了try{...}finally{...}
上面的代碼,經(jīng)程序編譯后的代碼如下:
FileStream file = File.Open("filePath", FileMode.OpenOrCreate);
try
{
//do something
}
finally
{
if (file!= null)
{
((IDisposable)file).Dispose();
}
}
兩段代碼的運(yùn)行結(jié)果是一樣的,對(duì)比之下,很明顯,使用using()的代碼更簡(jiǎn)潔。
04.實(shí)踐探索
實(shí)踐出真知,我們通過一個(gè)例子,使用反編譯工具(ILSpy或ILDasm)查看生成的DLL,進(jìn)行驗(yàn)證。
首先,定義一個(gè)實(shí)現(xiàn)了IDisposable接口的類。當(dāng)然也可以使用.NET中內(nèi)置的類,這里采用自定義類是為了驗(yàn)證,只要是實(shí)現(xiàn)了IDisposable接口的類,都可以使用這種方式。

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

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

至此,using()如何完成對(duì)非托管資源的釋放,就很清楚了。
05.總結(jié)
using()語句編譯后生成 try{...} finally{...} 語句,進(jìn)而確保資源釋放。
using()是程序中使用非托管資源的最佳方式。
using()的本質(zhì)是C#中的語法糖。
糖讓人快樂,同樣語法糖也能讓編程變得快樂,類似using()的語法糖,可以簡(jiǎn)化代碼,確保必要邏輯的正確執(zhí)行;糖只是調(diào)味劑,同樣語法糖也只是簡(jiǎn)化編碼,核心業(yè)務(wù)邏輯,還需要開發(fā)人員完成。
using的用法很簡(jiǎn)單,在合適的場(chǎng)景下正確使用,可以讓開發(fā)工作事半功倍。
到此這篇關(guān)于C# using()的使用方法的文章就介紹到這了,更多相關(guān)C# using()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)appSettings節(jié)點(diǎn)讀取與修改的方法
這篇文章主要介紹了C#實(shí)現(xiàn)appSettings節(jié)點(diǎn)讀取與修改的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10
C#?使用SpecFlow創(chuàng)建BDD測(cè)試用例的示例代碼
這篇文章主要介紹了C#?使用SpecFlow創(chuàng)建BDD測(cè)試用例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
基于C#實(shí)現(xiàn)一個(gè)溫濕度監(jiān)測(cè)小工具
這篇文章主要為大家詳細(xì)介紹了如何基于C#實(shí)現(xiàn)一個(gè)溫濕度監(jiān)測(cè)小工具,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-01-01
c# 使用模式匹配以及 is 和 as 運(yùn)算符安全地進(jìn)行強(qiáng)制轉(zhuǎn)換
這篇文章主要介紹了c# 使用模式匹配以及 is 和 as 運(yùn)算符安全地進(jìn)行強(qiáng)制轉(zhuǎn)換,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2020-10-10
C#中System.Text.Json匿名對(duì)象反序列化
這篇文章主要介紹了System.Text.Json匿名對(duì)象反序列化,下文代碼基于. NET 6,為了代碼整潔,實(shí)際配置了PropertyNameCaseInsensitive = true,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Unity3D獲取當(dāng)前鍵盤按鍵及Unity3D鼠標(biāo)、鍵盤的基本操作
這篇文章主要介紹了Unity3D獲取當(dāng)前鍵盤按鍵及Unity3D鼠標(biāo)、鍵盤的基本操作的相關(guān)資料,需要的朋友可以參考下2015-11-11
C#使用Fody實(shí)現(xiàn)監(jiān)控方法執(zhí)行時(shí)間
這篇文章主要為大家詳細(xì)介紹了C#如何使用Fody實(shí)現(xiàn)監(jiān)控方法執(zhí)行時(shí)間,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11
C#實(shí)現(xiàn)會(huì)移動(dòng)的文字效果
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)會(huì)移動(dòng)的文字效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04

